【发布时间】:2011-04-25 04:08:31
【问题描述】:
我不确定我的问题是什么,所以这个问题可能需要进一步澄清,但似乎最相关的是:
我有一个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
(角色是一个字符串)
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
返回的参数看起来像:
{"first_name"=>"", "last_name"=>"", "weddings_attributes"=>{"0"=>{"wedding_assignments_attributes"=>{"0"=>{"role"=>"Bride's Maid", "budget"=>""}}, "date"=>"", "ceremony_notes"=>""}}}
确切的错误是:
ActiveRecord::RecordInvalid in PeopleController#create
Validation failed: Role can't be blank
这显然是不正确的,因为你可以在params[]看到它
我做错了什么?
这是rails 3.0.0
【问题讨论】:
-
我很好奇那些
1.times有什么用? -
我这样做是为了方便以后将其更改为 2.times 或更多。
-
你是对的,这样做甚至可以让用户选择一次性添加10个婚礼。 :D
-
您的错误说在 create_with_appointment 方法上有错误,但它在您的控制器输出中不存在。这是什么方法?
-
您是否尝试过在您的
create方法中显式设置role属性的值?您甚至可以通过暂时删除role属性上的验证条件来检查这是否有效。
标签: ruby-on-rails ruby-on-rails-3 has-many-through