想象一下,我的模型上有一个布尔值和一个字符串属性,其数据如下:
Model.locked => true
Model.status => "Available"
当调用Update动作时,我想使用boolean属性来控制更新是否修改了字符串属性,更新中的所有其他属性都应该保存。
所以,如果
Model.locked => true
我们尝试
Model.status = "Sold"
然后
Model.status => "Available"
目前我有这样的模型......
before_update :dont_update_locked_item, :if => :item_locked?
def item_locked?
self.locked
end
def dont_update_locked_item
#Some rails magic goes here
end
如何阻止更新单个属性?
我知道答案会受到伤害,但有人会帮助我。已经很晚了,我很累,而且我很有天赋。 ; - )
答案 0 :(得分:2)
希望它不会那么伤害:)
class Item < ActiveRecord::Base
validate :cannot_update_if_locked, :on => :update
def item_locked?
self.locked
end
def cannot_update_if_locked
errors.add(:item_id, "is locked") if item_locked?
end
end
答案 1 :(得分:0)
试试这个:
class Item < ActiveReocrd::Base
def mass_assignment_authorizer
super + (locked? ? [] : [:status])
end
end
参考: