3

update_attributesパラメータとして渡されたハッシュの無効なキーを無視するのと同様の組み込みメソッドはありますか? そうでない場合、有効なキーを含む場合と含まない場合があるハッシュが送信される状況に対処する最善の方法は何ですか?

4

2 に答える 2

1

1 つのオプションは obj.valid? の実行です。update_attributes を呼び出す前に、無効なキー (obj.errors 配列のキー) を削除します。

def update_valid_attributes(o)  
  o.errors.messages.each do {|k,msg| o.delete k} if !o.valid?
  o.update_attributes
end

永続化されたすべてのエンティティで必要な場合は、このメソッドを ActiveRecord::Base に追加することもできます。

于 2012-11-26T19:21:23.167 に答える
1

Railsでこれをすぐに実現できるものは何も知りません。また、モデルの「定義された属性」が何であるかを一般的に判断する簡単な方法も知りません。モデルはセッターや仮想属性などをオーバーライドしている可能性があるためです。この機能が必要なときはいつでも、明示的に定義しましたクラスで受け入れ可能なシンボルのリスト。次のようなものです。

class Foo < ActiveRecord::Base
  def defined_attributes
    [ :a, :b, :c ]
  end
end

...そして、後で何らかのフィルタリングステップでそれを使用しました:

  attrs = { :a => 1, :z => 0 }
  foo.update_attributes(attrs.slice(*foo.defined_attributes))
于 2012-11-26T19:55:29.743 に答える