Rails 4多个嵌套表单

时间:2014-06-05 04:49:26

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

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

这里我们有

  • 人> has_many:地址
  • 地址> belongs_to:person

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

  • 人> has_many:地址
  • 地址> belongs_to:person,belongs_to:city
  • 城市> has_many:地址

当我尝试将字段City作为text_field而不是select时添加。我见过的所有例子都使用select。

我想要做的是创建一个表单来创建一个Person,允许Person插入Address并将City显示为文本字段。如果数据库中不存在该城市,那么创建它,如果不使用现有城市(我想这里我将不得不使用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

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

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

1 个答案:

答案 0 :(得分:1)

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

同样,您必须更改Address以便belongs_to :cityaccepts_nested_attributes_for :city