25

我有一个用户和一个配置文件模型。一个用户可以有多个配置文件。在用户创建过程中,我只需要从我的用户模型中的个人资料部分(即电话号码)访问一个信息。因此,我试图通过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 时(该方法是私有的,尽管我认为没关系),我得到一个空值。我在 users/new.html.erb 表单中使用以下内容

我的问题是这样做的正确方法是什么?我应该使用<% f.fields_for :profile do |ff| -%><% f.fields_for :profiles do |ff| -%>(注意第二个是复数)。当我使用复数 :profiles 时,我什至看不到表单上的字段。我在这里想念什么?模型 user.rb 中需要使用的时态是什么?:profile_phone_number 还是 :profiles_phone_number?谢谢。

4

4 回答 4

21

您可以执行以下操作:

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

于 2010-02-12T05:54:53.810 回答
13

您应该观看RailsCasts Nested Model Form
谢瑞恩贝茨的出色工作。

于 2010-02-16T11:32:15.480 回答
3

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

这个 api 停靠链接列出了许多嵌套属性示例,包括一对一、一对多。这很有帮助!

于 2013-01-28T09:04:21.630 回答
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_attributes,而不仅仅是:profile

于 2010-02-12T13:38:56.613 回答