ruby-on-rails - 嵌套表单 Rails

标签 ruby-on-rails ruby forms associations nested-forms

我有 2 个模型 User 和 Address 。

class User < ActiveRecord::Base 
  has_many :addresses
  accepts_nested_attributes_for :addresses
end

class Address < ActiveRecord::Base
  belongs_to :user
end

我的 Controller

  def new
    @user = User.new
    @user.addresses << Address.new
    @user.addresses << Address.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      #do something
    else
      render 'new'
    end
  end

还有我的看法

 <%= form_for @user do |f| %>
     <%= f.label :name %>
     <%= f.text_field :name %>
       <%= f.fields_for :addresses do |a| %>
         <p> Home </p>
         <%= a.text_field :state %>
         <%= a.text_field :country%>
         <%= a.text_field :street %>
         <p> Work </p>
         <%= a.text_field :state %>
         <%= a.text_field :country%>
         <%= a.text_field :street %>
       <% end %>
     <% end %>
   <% end %>

我的问题是我只得到在参数中输入的最后一个州、国家、街道。

"addresses_attributes"=>{"0"=>{"street"=>"test", "state"=>"test",, "country"=>"test"},
"1"=>{"street"=>"", "state"=>"", "country"=>""}} 

此外,如果有更好的方法,我将不胜感激任何建议。

最佳答案

rails API表示 fields_for 将在地址集合中的每个元素上自行重复。

我建议为您的地址添加一种标签(例如工作、家庭等)。然后它应该自己工作。有了这个标签,您在添加更多地址时会更加灵活。

   <%= f.fields_for :addresses, @user.addresses do |a| %>
     <p> <%= a.object.label %> </p>
     <%= a.text_field :state %>
     <%= a.text_field :country%>
     <%= a.text_field :street %>
   <% end %>

关于ruby-on-rails - 嵌套表单 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887154/

相关文章:

ruby-on-rails - 如何使用多个子查询编写 Rails 查找器

ruby-on-rails - Rails 4 通过多个级别获取 has_many 的计数

ruby-on-rails - 如果新属性与现有属性相同,Active Record 是否继续使用 'save'?

php - 回复发件人 - PHP 电子邮件

javascript - 如何用JS根据表单输入重定向到特定页面?

ruby-on-rails - 新建 + 保存和创建之间的 Rails 差异

ruby - 使用 Ruby CSV 创建 Rails 记录,其中字符串字段不可查询

ruby-on-rails - 如何将两个缓存加入模型中

ruby - 什么 xpath 查询可以解决这个问题

php - Magento 注册表格