2

フォームが送信されたときに、Railsで単一の属性が更新されないようにするにはどうすればよいですか?他のすべての属性を更新する必要があります。

それですかbefore_saveattr_readerそれとも他の方法ですか?

を使用している場合before_save、属性ハッシュにアクセスする方法は?

Rails 3.0.7

4

2 に答える 2

2

チェックアウトしてくださいattr_protected

Class YourModel << ActiveRecord::Base

  attr_protected :the_one_column, as: :update

  # ...
end

への呼び出しの一部としてupdate_attributes、役割を指定します。:updateたとえば、

klass = YourModel.find(some_id)
klass.update_attributes(params[:your_model], as: :update)

に渡され:the_one_columnた が設定されている場合、エラーがスローされます。paramsupdate_attributes

@Beerlington が質問へのコメントで述べたように、attr_accessibleも確認する必要があります。attr_accessible一般に、特定の属性を でブラックリストに登録するよりも、を使用して属性をホワイトリストに登録するアプリケーションのすべてのモデルに 30 分を費やす方が適切ですattr_protected

于 2012-08-18T17:04:06.957 に答える
2

他のオプションは、コントローラーでこれを行うだけです:

klass.update_attributes( params[:your_model].except(:attributes_to_avoid) )
于 2012-08-19T06:08:44.793 に答える