代码之家  ›  专栏  ›  技术社区  ›  Swamy g

Rails中的嵌套表单-中的访问属性有许多关系

  •  20
  • Swamy g  · 技术社区  · 16 年前

    我有一个用户和一个配置文件模型。一个用户可以有多个配置文件。在用户创建过程中,我只需要从我的用户模型中的配置文件部分(即电话号码)访问一个信息。所以我想把它完成 attr_accessible .我的user.rb看起来像这样。

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

    我面临的问题是,当我尝试在user.rb的方法中调用getter方法配置文件的mobile_编号(该方法是私有的,尽管我认为这并不重要),我得到的是一个空值。我在users/new.html.erb表单中使用以下内容

    我的问题是,正确的方法是什么?我应该用吗? <% f.fields_for :profile do |ff| -%> <% f.fields_for :profiles do |ff| -%> (注意第二个是复数)。当我使用复数:配置文件时,我甚至看不到窗体上的字段。我这里缺什么?在model user.rb中需要使用什么时态?:配置文件电话号码还是:配置文件电话号码?谢谢。

    4 回复  |  直到 11 年前
        1
  •  18
  •   Pran    16 年前

    您可以执行以下操作:

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

        2
  •  12
  •   allenwei    16 年前

    你应该看 RailsCasts Nested Model Form .
    谢谢 Ryan Bates 伟大的工作。

        3
  •  3
  •   ryancheung    13 年前

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

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

        4
  •  0
  •   nanda    16 年前

    你可以用 accepts_nested_attributes_for “这样做;但形式上有一个小技巧:

    您必须使用单数,并为每个配置文件调用字段\u,如下所示:

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

    注意这是 :配置文件属性 而不是仅仅 :配置文件 .

    推荐文章