2011-01-02 15 views
4

私はマルチモデルフォームを作成しようとしていますが、問題の1つは、フォーム内でモデルをリンクする必要があることです。 、ユーザー新しいユーザーを作成するとき、私は同時に新しいプロファイルを作成したいとして、2をリンクしたいネストされたモデルフォームを作成する

プロファイル:

は例えば、私が持っているフォームは、次のモデルを持って言うことができます。問題は、どちらもまだ作成されていない場合、IDはまだありません。どうすればリンク値を割り当てることができますか?

ありがとうございます!

-Elliot

私は何人かの人々がこれをお気に入りへの追加されて、気づいた - 答えを持っている私の2番目の質問をチェックアウト、二つのモデルをリンクの詳細を表示する:所望の結果を達成するためにLinking two models in a multi-model form

答えて

5

1つの方法あなたがRailsの中でサポートしてネストされた属性を活用して、フォームを作ることができるということです。

<%= form_for(@user) do |f| %> 
    <%= f.label :my_user_attribute %> 
    <%= f.text_field :my_user_attribute %> 

    <%= f.fields_for :profile do |fp| %> 
    <p> 
     <%= fp.label :my_profile_attribute %> 
     <%= fp.text_field :my_profile_attribute %> 
    </p> 
    <% end %>  

    <%= f.submit %> 
<% end %> 

あなたはまた、あなたのUserクラスに以下を追加する必要があります。

accepts_nested_attributes_for :profile 

アクティブレコードネストされた属性hereについて詳しく読むことができます。 ActionViewフォームヘルパーhere(「ネストされた属性の例」のページを検索してください)の詳細を読むことができます。

このアプローチを使用すると、両方のモデルで良好な検証が行われるため、データベースIDのトラッキングについて心配する必要はありません。これは、ActiveRecordによって両方が同時に作成されるためです有効)。

+0

こんにちはスコット、応答のおかげで!あなたが投稿したコードを理解しているかどうかは分かりません。試してみましたが、未定義の変数やメソッドの 'fp'エラーが出ていますか? – Elliot

+0

こんにちはElliot - コードを更新しました。間違いました。フォームビルダ変数の最初の数は、 'f'でなく 'fp'でなければなりません(行2と3が更新されます)。謝罪 - あまりにも速い書き込み方法でした!基本的に、このコードでは、親子関連オブジェクトの入れ子フォーム入力フィールドを実行できます。 – Scott

+0

ありがとうScott!あなたが言ったように私はそれを更新し、form_for(@users)は表示されますが、fields_forプロファイルセクションは表示時に非表示に見えますか? – Elliot

関連する問題