Rails在保存父模型上设置多态id

时间:2014-11-18 14:56:34

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

我正在尝试在我的应用程序中创建一个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

0 个答案:

没有答案