2009-05-25 3 views
1

私はコントローラでこれを言う場合:生のフォームデータからモデルオブジェクトを作成する - 1対1のフィールドマッチングが必要ですか?

@order = Order.new(params[:order]) 

これが機能するためには何が必要ですか。

params[:order]と注文モデルのすべてのフィールドの間に1対1の一致が必要ですか?

params[:order]には、注文をインスタンス化するために必要なフィールド数より多くのフィールドを含めることができますか?

答えて

1

params [:order]自体は、それぞれのキーがモデルフィールドの名前であるハッシュである必要があります。 Railsがフォームフィールド名をparamsハッシュに変換する方法を知るには、form_forヘルパーとビューソースを持つビューテンプレートを作成します。

もっと多いか少ないフィールドがあります。はい。余分なフィールドは無視されます。少数のフィールドはインスタンスオブジェクトにコピーされません。 ActiveRecordオブジェクトをインスタンス化するために何もする必要はありません。 (オブジェクトの妥当性と保存は別の話ですが、検証とActiveRecordコールバックメカニズムが呼び出されます)。

+0

これでオブジェクトをインスタンス化するのに問題はありません。あなたが遭遇するかもしれない問題は、保存または更新しようとするときです。その場合、フィールド数が少なくてもデータベースの要件に違反する可能性があります。 – eggdrop

+0

うん、まあまあ。検証は、オブジェクトまたはコールを保存するまで実行されません。または無効です。もっと見る:http://guides.rubyonrails.org/activerecord_validations_callbacks.html – Raphomet

1

実際にフィールドが少なくなる可能性があります。

妥当性検査に必要なフィールドがすべてあることを確認してください。

+0

さらに、フォーム内にモデル内のフィールドより多くのフィールドがありますか? ActiveRecordは無関係なものを無視しますか? – eggdrop

関連する問題