ruby-on-rails - 嵌套参数,具有一对一的多态性

标签 ruby-on-rails ruby-on-rails-4 nested-attributes

我遇到了一个问题,我尝试像往常一样在我的 #new-action 上使用表单向一个人添加地址。
我目前正在做的是

class Person < ActiveRecord::Base
  has_one :address, :as => :owner

  accepts_nested_attributes_for :address
end

class Address < ActiveRecord::Base
  belongs_to :owner, :polymorphic => true
end

在我的表单中,我使用 form_for @person do |f| - 然后是表单,然后是 f.fields_for :address do |af| 和字段,使用 af.text_field

我的 Controller Action :

def create
  person = Person.new(person_params)

  if person.valid?
    person.save
    redirect_to edit_content_person_path(@current_work_context, person)
  else
    @person = person
    render 'new'
  end
end

def person_params
    params.require(:person).permit( :name, :address => [:line_one, :line_two, :zipcode, :city])
end

当我使用这些参数提交表单时:

{"utf8"=>"✓",
 "authenticity_token"=>"blablabla==",
 "person"=>{"name"=>"mr man",
 "address"=>{"line_one"=>"test address 15",
 "line_two"=>"",
 "zipcode"=>"2600",
 "city"=>"Glostrup"}},
 "locale"=>"da",
 "context_id"=>"9"}

然而,我得到了异常:ActiveRecord::AssociationTypeMismatch

Address(#70198415678880) expected, got ActionController::Parameters(#70198414055220)

我似乎无法弄清楚为什么。

编辑 - 我的观点,简化:

<%= form_for @person do |f| %>

  <%= f.text_field :name %>

  <%= f.fields_for :address do |af| %>
    <%= af.label :address %>
    <%= af.text_field :line_one, :placeholder => "Address 1" %>
    <%= af.text_field :line_two, :placeholder => "Address 2" %>

    <%= af.label :zipcode %>
    <%= af.text_field :zipcode, :class => "form-control" %>

    <%= af.label :city %>
    <%= af.text_field :city, :class => "form-control" %>

  <% end %>

<% end %>

最佳答案

让我们尝试一件事。请和这行并重新启动您的服务器

# config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect|'
  inflect.irregular 'address', 'addresses'
end

编辑

# after we discussing more about the problem in chat we found the solution. 
# The object 'Person' not initialize correctly to f.fields_for :address

# view

<% f.object.build_address if f.object.address.blank? %> #add this line 
<%= f.fields_for :address do |af| %>

关于ruby-on-rails - 嵌套参数,具有一对一的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952723/

相关文章:

ruby-on-rails - 表格列宽不增加

html - Rails 4,根据用户更改布局中的 Logo

ruby-on-rails - Rails 3 - 通过嵌套属性保存属于少数模型的模型

ruby-on-rails - rails : Getting rid of generic "X is invalid" validation errors

ruby-on-rails - 如何在 "day, month, year"时间表达式中使用 "1.VARIABLE.ago"这样的字符串变量?

ruby-on-rails - 如何测试 APNS p12 证书环境 ruby​​?

ruby-on-rails - 你如何从 nitrous.io 推送到 GIT

ruby-on-rails - 从引发异常中拯救 ActionController::UnknownFormat

ruby-on-rails - ActiveRecord SUM 在计算中包含的对象多于它提供没有求和的相同查询

ruby-on-rails-4 - 多级accepts_nested_attributes_for时的Rails 4强参数