我正在尝试在我的应用程序中创建一个person对象,但在调用@person.save!
时在控制器内,抛出异常ActiveRecord::RecordInvalid: Validation failed: Contacts contactable can't be blank
。这是由于未设置contactable_id
。
我知道我可以保存此人,然后创建并保存联系人,但是可以预先保存所有内容。我错过了什么?
所涉及的课程如下:
person.rb
class Person < ActiveRecord::Base
has_many :contacts, as: :contactable
accepts_nested_attributes_for :contacts
end
contact.rb
class Contact < ActiveRecord::Base
belongs_to :contactable, polymorphic: true
end
表单发布以下内容:
{"commit"=>"Add Person",
"person"=>{"name"=>"Fred Bloggs"},
"website"=>"http://www.example.com",
"controller"=>"person",
"action"=>"create"}
并在控制器创建方法中处理。
person_controller.rb
class PersonController < ApplicationController
def create
load = person_params.merge({contacts_attributes: [{address:params[:website],contact_type:"web", contact_sub_type: "main"}]})
@person = Person.new(load)
@person.save!
end
private
def person_params
params.require(:person).permit( ..... contacts_attributes: [:address, :contact_type, :contact_sub_type])
end
end