Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中的嵌套表单-中的访问属性有很多关系_Ruby On Rails_Ruby_Nested Forms - Fatal编程技术网

Ruby on rails rails中的嵌套表单-中的访问属性有很多关系

Ruby on rails rails中的嵌套表单-中的访问属性有很多关系,ruby-on-rails,ruby,nested-forms,Ruby On Rails,Ruby,Nested Forms,我有一个用户和一个配置文件模型。一个用户可以有多个配置文件。在用户创建过程中,我只需要访问我的用户模型中profiles部分的一个信息(即电话号码)。因此,我试图通过attr\u accessible来完成它。我的user.rb看起来像这样 has_many :profiles attr_accessible :handle, :email, :password, :profile_mobile_number attr_accessor : :profile_mobile_number 我面临

我有一个用户和一个配置文件模型。一个用户可以有多个配置文件。在用户创建过程中,我只需要访问我的用户模型中profiles部分的一个信息(即电话号码)。因此,我试图通过
attr\u accessible
来完成它。我的user.rb看起来像这样

has_many :profiles
attr_accessible :handle, :email, :password, :profile_mobile_number
attr_accessor : :profile_mobile_number
我面临的问题是,当我试图在user.rb中的方法中调用getter方法profile\u mobile\u number(该方法是私有的,尽管我认为这无关紧要),我得到的是一个空值。我在users/new.html.erb表单中使用以下内容


我的问题是这样做的正确方式是什么?我应该使用
还是
(注意第二个是复数)。当我使用复数:profiles时,我甚至看不到表单上的字段。我错过了什么?model user.rb中需要使用的时态是什么个人资料\电话号码还是:个人资料\电话号码?谢谢。

您可以执行以下操作:

<% 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 %>
{:action=>“update”}do| user|u form |%>
...
电话号码:
但是既然您已经有了关联,那么最好使用“”

您可以使用“”;但在形式上有一个小技巧:

对于每个配置文件,必须使用单数和调用字段,\u,如下所示:

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

请注意,这是:profile\u属性,而不仅仅是:profile
感谢您的出色工作。


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

如果是属于多态关联,则必须在用户模型中定义一个build_profile方法。值得一提的是,该方法会迭代已经存在的关联对象。但是,它不会创建要填充的新空记录。如果关联中没有新记录,请使用附加新记录的帮助程序,例如“def setup_profiles(user);user.profiles.build if user.profiles.blank?| |!user.profiles.map(&:new_record?)。any?;user;end”,然后使用“form_for setup_profiles(@user)do…”hurikhan77的评论至关重要!如果不存在关联对象,则需要构建新对象,否则表单中不会显示任何内容!就像我说的,我使用f.fields_表示:配置文件和表单中的字段没有显示。原来我必须在控制器中添加@user.profiles.build。但是现在我无法在user.rb中同时访问attr_和接受嵌套的属性。前者高于后者。但是我确实想让attr_可访问用户模型的属性,同时不限制对概要文件模型属性的访问。有什么想法吗?谢谢,瑞安想出了一个很好的解决办法。