Nested forms in rails - accessing attribute in has_many relation

寵の児 提交于 2019-12-17 18:28:04

问题


I have a user and a profile model. One user can have many profiles. I need to access only one information from the profiles section (viz the phone number) in my user model during the user creation process. Hence I'm trying to get it done through attr_accessible. My user.rb looks like this.

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

The problem that I'm facing is that when I try to call the getter method profile_mobile_number in a method in user.rb (the method is private, though I think it doesn't matter), I'm getting a null value. I use the following in my users/new.html.erb form

My question is what is the right way to do this? Should I use <% f.fields_for :profile do |ff| -%> or <% f.fields_for :profiles do |ff| -%> (notice that the second one is plural). When I use the plural :profiles, I don't even see the fields on the form. What am I missing here? And what is the tense that needs to be used in model user.rb? :profile_phone_number or :profiles_phone_number? Thanks.


回答1:


You could do something like the following:

<% 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 %>

But since you already have an association, then might as well use 'accepts_nested_attributes_for'




回答2:


You should watch RailsCasts Nested Model Form.
thanks Ryan Bates great work.




回答3:


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

This api dock link list many Nested Attributes Examples including one-to-one, one-to-many. It's very helpful!




回答4:


You can use 'accepts_nested_attributes_for' to do this; but there's a little trick in forms:

You must use the singular, and call fields_for for each profile, like this:

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

Notice that is :profile_attributes, instead of just :profile.



来源:https://stackoverflow.com/questions/2249160/nested-forms-in-rails-accessing-attribute-in-has-many-relation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!