web-dev-qa-db-ja.com

Rails-has_many関係の属性へのアクセス)のネストされたフォーム

ユーザーとプロファイルモデルがあります。 1人のユーザーが多くのプロファイルを持つことができます。ユーザー作成プロセス中に、ユーザーモデルのプロファイルセクション(電話番号)から1つの情報にのみアクセスする必要があります。したがって、私はattr_accessibleを介してそれを成し遂げようとしています。私のuser.rbは次のようになります。

has_many :profiles
attr_accessible :handle, :email, :password, :profile_mobile_number
attr_accessor : :profile_mobile_number

私が直面している問題は、user.rbのメソッドでgetterメソッドprofile_mobile_numberを呼び出そうとすると(メソッドはプライベートですが、問題ではないと思います)、null値を取得することです。私はusers/new.html.erbフォームで以下を使用します

私の質問は、これを行う正しい方法は何ですか? <% f.fields_for :profile do |ff| -%>または<% f.fields_for :profiles do |ff| -%>を使用する必要があります(2番目は複数形であることに注意してください)。複数形の:profilesを使用すると、フォームのフィールドすら表示されません。ここで何が欠けていますか?そして、モデルuser.rbで使用する必要がある時制は何ですか? :profile_phone_numberまたは:profiles_phone_number?ありがとう。

23
Swamy g

次のようなことができます。

<% form_for @user, :url => { :action => "update" } do |user_form| %>
  ...
  <% user_form.fields_for :profiles do |profiles_fields| %>
     Phone Number: <%= profiles_fields.text_field :profile_mobile_number %>
   <% end %>
<% end %>

ただし、すでに関連付けがあるため、「 accepts_nested_attributes_for 」を使用することもできます。

20
Pran

ご覧ください RailsCasts Nested Model Form
ありがとう ライアンベイツ 素晴らしい仕事。

13
allenwei

http://apidock.com/Rails/v3.2.8/ActionView/Helpers/FormHelper/fields_for

このAPIドックリンクには、1対1、1対多を含む多くのネストされた属性の例がリストされています。とても助かります!

3
ryancheung

' accepts_nested_attributes_for 'を使用してこれを行うことができます。しかし、フォームにはちょっとしたトリックがあります。

次のように、単数を使用し、プロファイルごとにfields_forを呼び出す必要があります。

<% form_for @user do |f| -%>
<% @user.profiles.each do %>
<% f.fields_for :profile_attributes, profile do |ff| -%>
<% end %>

:profileではなく、:profile_attributesであることに注意してください。

0
nanda