【问题标题】:Rails 4 Multiple nested formsRails 4 多个嵌套表单
【发布时间】:2014-06-05 04:49:26
【问题描述】:

我正在尝试创建一个多重嵌套表单,我一直在关注这个示例 http://guides.rubyonrails.org/form_helpers.html#building-complex-forms

我们来了

  • 人员 > has_many :addresses
  • 地址 > 归属地:人

但如果我想添加 City 表,我会拥有

  • 人员 > has_many :addresses
  • 地址 > 归属地:人,归属地:城市
  • 城市 > has_many :addresses

当我尝试在表单中添加字段 City 作为 text_field 而不是作为选择时,问题就出现了。我见过的所有示例都使用 select。

我想要做的是有一个表单来创建一个人,允许这个人插入地址并将城市显示为一个文本字段。如果数据库中不存在城市,则创建它,如果不使用现有的城市(我想这里我将不得不使用 find_or_create_by?)。

人物

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

地址

class Address < ActiveRecord::Base
  belongs_to :person
  belongs_to :city
  accepts_nested_attributes_for :city
end

城市

class City < ActiveRecord::Base
  has_many :addresses
end

我不知道如何处理人员参数,我有这个:

def person_params
    params.require(:person).permit(:name, addresses_attributes: [:id, :kind, :street, cities_attributes: [:id, :city]])
  end

查看

<%= form_for @person do |f| %>
  Addresses:
  <ul>
    <%= f.fields_for :addresses do |addresses_form| %>
      <li>
        <%= addresses_form.label :kind %>
        <%= addresses_form.text_field :kind %>

        <%= addresses_form.label :street %>
        <%= addresses_form.text_field :street %>

        <%= addresses_form.fields_for :cities do |cities_form| %>
           <%= cities_form.label :city %>
           <%= cities_form.text_field :city %>
        <% end %>
      </li>
    <% end %>
  </ul>
<% end %>

当我尝试添加城市时出现此错误

Unpermitted parameters: cities

它不会将城市或地址添加到数据库中。

我一直在尝试解决这个问题,但我无法找到解决方案。知道我做错了什么吗?

【问题讨论】:

  • 向我们展示您的 Person 模型。
  • 我修改了原始帖子以显示 3 个模型

标签: ruby-on-rails forms ruby-on-rails-4 nested-forms


【解决方案1】:

应该是city_attributes。 地址不是have_many :cities,只有一个。 :)

同样,您必须将Address 更改为belongs_to :cityaccepts_nested_attributes_for :city

【讨论】:

  • 我现在就是这样
  • 您上面的代码不是这样的。它有accepts_nested_attributes_for :cities 注意复数。它应该是 accepts_nested_attributes_for :city 你也有 cities_attributes: [:id, :city] 应该是:city_attributes: [:id, :city]
  • 我终于明白你在说什么了,它奏效了!谢谢天才
猜你喜欢
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 2016-01-06
相关资源
最近更新 更多