0

モデルにブール値と文字列の属性があり、次のようなデータがあるとします。

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

単一の属性が更新されないようにするにはどうすればよいですか?

私は答えが傷つくことを知っていますが、誰かが私を助けてくれます. 遅いです。疲れていて、才能がありません。;-)

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 に答える