在另一个表中创建一个新行,并在其他某个表中更改状态



我有一个请求表,其中的状态是一个字段和一个遭遇表。状态字段显示状态表 中的下拉列表。我想要的是,随着状态的每次更改,都会在遭遇表中创建一个新记录,该记录保留每个请求的所有状态的记录。我需要关于如何实现这一目标的建议。

request_form

<%= form_for([@client, @request], local: true) do |form| %>
  <div class="field">
    <%= form.label :status_id %>
    <%= form.collection_select :status_id, Status.all, :status, :status, {prompt: "Select"}, autofocus:true %>
  </div>
<% end %>

遇到表架构

create_table "encounters", force: :cascade do |t|
    t.integer "request_id"
    t.date "status_change_date"
    t.integer "admin_id"
    t.string "notes"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

请求.rb

has_many :encounters

邂逅.rb

belongs_to :request

请求.rb

after_update :create_encounter
def create_encounter
    if self.changes.keys.include?(:status_id)?
      puts "updated"
    end
  end

在request.rb上,你在self.changes.keys.include?(:status_id)?末尾有一个?标记,这是一个错误。让它喜欢self.changes.keys.include?(:status_id).

您可以使用 rails 模型回调

根据要求.rb

after_update :create_encounter
def create_encounter
  if self.changes.keys.include?(:status_id)
   # your code to create encounter related to request
  end

结束

最新更新