如果更新时存在特定列,则更新另一列

Update another column if specific column exist on updation

我有一个模型,它有两列 admin_approvedapproval_date。管理员使用 activeadmin 更新 admin_approved。我希望管理员更新此列时 approval_date 也由 current_time 更新。

我不明白我是怎么做的this.Whichcall_back我用

在模型中使用 after_save 回调。

会是这样的:

after_save do
  if admin_approved_changed?
    self.approval_date = Time.now
    save!
  end
end

或根据需要更改条件!

您可以在保存模型实例之前设置 approval_date。因此,您保存数据库写入过程而不是使用 after_save 来保存您的实例,并在 after_save 回调中再次保存它。

class MyModel < ActiveRecord::Base
  before_save :set_approval_date

  # ... your model code ...

  private

  def set_approval_date
    if admin_approved_changed?
      self.approval_date = Time.now
    end
  end
end

可能在您的控制器中:

my_instance = MyModel.find(params[:id])
my_instance.admin_approved = true
my_instance.save
#app/models/model.rb
class Model < ActiveRecord::Base
   before_update 'self.approval_date = Time.now', if: "admin_approved?"
 end 

这假设您的 table 中有 admin_approved (bool)approval_date (datetime)

其工作方式是use a string在更新前评估admin_approved属性是否为"true"。如果是,它将 approval_date 设置为当前时间。