rails 3 has_many:通过记录保存错误

Soo*_*uNe 6 ruby-on-rails has-many-through ruby-on-rails-3

我不确定我的问题是什么,所以这个问题可能需要更多的澄清,但这里似乎是最相关的:

我有一个has_many :through和连接模型有一些不是外键的字段.当我构建模型并尝试保存时,我从连接模型的非外键字段获得验证错误.

我的文件看起来像:

Person.rb

  has_many :wedding_assignments, :dependent => :destroy
  has_many :weddings, :through=>:wedding_assignments
  accepts_nested_attributes_for :weddings
  accepts_nested_attributes_for :wedding_assignments

Wedding.rb

  has_many :wedding_assignments, :dependent => :destroy
  has_many :people, :through=>:wedding_assignments
  accepts_nested_attributes_for :people
  accepts_nested_attributes_for :wedding_assignments

WeddingAssignment.rb

  belongs_to :person
  belongs_to :wedding
  validates_presence_of :role, :person, :wedding
Run Code Online (Sandbox Code Playgroud)

(角色是一个字符串)

people_controller.rb

  def new
    @person = Person.new

    1.times do
      wedding = @person.weddings.build
      1.times do
        assignment = wedding.wedding_assignments.build
        assignment.person = @person
        assignment.wedding = wedding
      end
    end
  end

  def create
    @person = Person.new(params[:person])
    @person.weddings.each do |wedding|
      wedding.wedding_assignments.each do |assignment|
        assignment.person = @person  #i don't think I should need to set person and wedding manually, but I get a validation error if I don't
        assignment.wedding = wedding
      end
    end
 end
Run Code Online (Sandbox Code Playgroud)

回来的参数看起来像:

{"first_name"=>"", "last_name"=>"", "weddings_attributes"=>{"0"=>{"wedding_assignments_attributes"=>{"0"=>{"role"=>"Bride's Maid", "budget"=>""}}, "date"=>"", "ceremony_notes"=>""}}}
Run Code Online (Sandbox Code Playgroud)

而确切的错误是:

ActiveRecord::RecordInvalid in PeopleController#create
Validation failed: Role can't be blank
Run Code Online (Sandbox Code Playgroud)

这显然是不正确的,因为你可以看到它 params[]

我究竟做错了什么?

这是rails 3.0.0

cod*_*tim 0

尝试将“Person.new”更改为“Person.create”,也许立即在数据库中创建记录将有助于关联。