我有一个公司模型:
class Company < ActiveRecord::Base
has_and_belongs_to_many :jobs
validates :name, presence: true
end
和一个工作模型:
class Job < ActiveRecord::Base
has_and_belongs_to_many :companies
validates :name, presence: true
end
除了 collection.create 方法外,一切正常。根据Rails 文档:
collection.create 方法返回关联类型的新对象。该对象将从传递的属性中实例化,将创建通过连接表的链接,并且一旦它通过关联模型上指定的所有验证,关联对象将被保存。
这对我来说似乎不能正常工作:即使子对象无效(并且验证有效,因为无效模型没有被保存),仍然会创建关联。我创建了这个单元测试来解释我是如何尝试这样做的:
test "add invalid job to company" do
company = FactoryGirl.create(:company_with_job)
# I also tried:
# company.jobs << FactoryGirl.build(:job, name: "")
company.jobs.create({name: ""})
company.save
assert_equal 1, company.jobs.size
end
大小改为“2”,如果我检查 company.jobs,我会得到:
[#<Job id: 1, name: "My Job 1", created_at: "2012-11-07 10:26:10", updated_at: "2012-11-07 10:26:10">,
#<Job id: nil, name: "", created_at: nil, updated_at: nil>]
我确定我错过了一些愚蠢的东西,但我一直在努力解决这个问题,似乎无法理解我做错了什么。
谢谢,
克