我有一个名为“MyModel”的模型,它具有名为“status”的属性。 我可以像这样更新这个属性: model.status =“new” model.save!
但是,我使用自己的模型方法“update_status”覆盖此更新方法。除非使用“update_status”
,否则通过默认更新的任何更新都将被拒绝答案 0 :(得分:0)
您当然可以做的是跟踪已更改的属性,并仅过滤您希望在before_update回调中允许更新的属性。在update_status
方法中,您可以通过update_column
使用不会触发回调的分配。
before_update :prevent_status_update
private
def prevent_status_update
return true unless self.changed.includes? 'status'
self.errors.add_to_base "Cannot update a #{ self.to_s }"
false
end