3

推奨される解決策は次のとおりです。

config.active_record.whitelist_attributes = true

ただし、これはアクティブレコードを使用している場合にのみ機能します。Mongoid Railsプロジェクトでは、同様のアプローチがありますか?アクティブモデルを使用しますが、アクティブレコードは使用しません。

4

3 に答える 3

2

私はMongoidを使用したことがないので、これはかなり推測的ですが、その外観から、ARはRailtie初期化子を使用して、その構成がtrueの場合にattr_accessible(nil)を設定します。

現在、構成でそれを行う方法はないようですが、おそらく独自のイニシャライザーで何らかの方法でフックすることができます。Mongoid :: Fieldsでは、protect_sensitive_fieldsの構成がtrue(デフォルト)の場合、id、_id、および_typeに対してattr_protectedを呼び出します。また、active_authorizerをブラックリストに設定します。おそらくそれをパッチして、代わりにattr_accessible(nil)を呼び出すホワイトリストのより良い設定を与えることができます。

そうですね、パッチを作成してからプルリクエストを送信するのは悪い考えではありません。ルビーコミュニティが最後に必要とするのは、もう1つの注目を集める大量割り当ての大失敗です。

于 2012-03-20T07:09:57.527 に答える
1

これは今のところトリックを行います:

http://groups.google.com/group/mongoid/browse_thread/thread/de5a93a350b49c02?pli=1

于 2012-03-26T13:05:59.013 に答える
1

私は同じ質問をしました

https://groups.google.com/forum/?fromgroups#!topic/mongoid/xuBbuyhiFEU

現在はサポートされていませんが、(まっすぐ進む)モンキーパッチを実行できます(Benediktが提案したように)

https://gist.github.com/1977438

これはARと非常によく似ています(ARコードをチェックインできます。簡単にするためにここにコピーします)

ActiveSupport.on_load(:active_record) do
    if app.config.active_record.delete(:whitelist_attributes)
      attr_accessible(nil)
    end
    app.config.active_record.each do |k,v|
      send "#{k}=", v
    end
  end
于 2012-03-28T11:01:57.403 に答える