0

想象一下,我的模型上有一个布尔值和一个字符串属性,其数据如下:

Model.locked => true
Model.status => "Available"

调用更新操作时,我想使用布尔属性来控制字符串属性是否被更新修改,无论如何都应该保存更新中的所有其他属性。

因此,如果

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

如何防止单个属性被更新?

我知道答案会很痛苦,但有人帮帮我。已经很晚了,我累了,而且我的天赋刚刚好。;-)

4

2 回答 2

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
于 2012-06-26T23:17:58.413 回答
0

试试这个:

class Item < ActiveReocrd::Base

  def mass_assignment_authorizer
    super + (locked? ? [] : [:status])
  end
end

参考:

动态 attr_accessible

于 2012-06-27T02:41:48.520 回答