如果更新时存在特定列,则更新另一列
Update another column if specific column exist on updation
我有一个模型,它有两列 admin_approved
和 approval_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
设置为当前时间。
我有一个模型,它有两列 admin_approved
和 approval_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
设置为当前时间。