ユーザーとプロファイルモデルがあります。 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?ありがとう。
次のようなことができます。
<% 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 」を使用することもできます。
ご覧ください RailsCasts Nested Model Form 。
ありがとう ライアンベイツ 素晴らしい仕事。
http://apidock.com/Rails/v3.2.8/ActionView/Helpers/FormHelper/fields_for
このAPIドックリンクには、1対1、1対多を含む多くのネストされた属性の例がリストされています。とても助かります!
' 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であることに注意してください。