コードは次のとおりです。Mongoid:未定義フィールドが一意の代入によって作成されないようにするにはどうすればよいですか?
class M
include Mongoid::Document
field :name
end
params = { name: "foo", age: 20 }
M.create(params)
#=> #<M name: "My Name", age: 20>
age
は定義されていませんが、保存されています。
悪意のあるユーザーがPOSTでパラメータを追加したり、大きな文字列を使って未知のフィールドを追加したりする可能性があるため、これは問題である可能性があります(例:name=foo&bogus=#{'x'*1000000}
)
これまでのところ、 attr_accessible
以外は何も見つかりませんが、すべてのモデルで、field
とattr_accessible
の両方で同じフィールド名を常に維持しなければならないので、Mongoidにとってはそれほど素晴らしいものではありません。ドライではない。
attr_accessible
APIはActiveRecordに最適だと思います。モデル(DRY)とのフィールドを明示的に定義していないb。これは、存在しないフィールドがRDBに保存されることはないことが保証されています。しかし、モンゴイドにとって、私はattr_accessible
よりも良い解決策があるはずだと思います。
グローバル設定にはallow_dynamic_fields
を設定していることに注意してください。しかし、これはマス割り当てに関するものではありませんので、このディスカッションの範囲外ですが、実際にはモデルごとのマクロでなければならないと思います。
どのようにこの問題に対処していますか?
この解決策を見つけましたか?私も同じ問題に直面しています。 – Rohit