0

私のクラスにはsecret、特定のプロセスを使用して生成する列があります。このため、ユーザーが編集フォームを介してこのフィールドを更新できるようにしたくありません。
ただし、ユーザーが手動でsecretタグをフォームに追加して送信すると、オブジェクトsecretも更新されます。

def update
  object.attributes = params[:my_class]
end

このようなフィルタの前に作成すると思います

before_filter :clear_secret, :only => :update
def clear_secret
  params.delete(:secret)
end

これを行うためのより良い方法があるかどうかを知りたいです。モデルからこれを行うことはできますか?これには既存のRailsメソッドがありますか?

4

2 に答える 2

2

Rails 3 を使用している場合は、次の方法でこれを保護できます。attr_protected

class YourModel < ActiveRecord::Base
  attr_protected :secret
end

ユーザーがフォームにフィールドを挿入しようとするとsecret、Rails は代わりにActiveModel::MassAssignmentSecurity::Error.

ただし、このメカニズムは Rails 4 では推奨されておらず、@gylaz によって参照される strong_parameters メカニズムが採用されています。

于 2013-07-09T04:28:27.813 に答える
2

これを行うには、 strong_parameters gemを使用するのが一般的です。

上記の宝石を使用すると、次のように、更新可能な属性のみを許可できます。

params.permit(:some_attr, :another_attr)
于 2013-07-09T04:19:02.727 に答える