Rails嵌套属性关联validation失败

我有一个Rails模型的嵌套属性,并且关联validation由于某种原因失败。 我没有使用accepts_nested_attributes_for,但我正在做一些非常相似的事情。

class Project "name", :value=>val) end end end class ProjectAttribute  :project_id validates_presence_of :project_id, :unless => lambda {|attribute| attribute.project.try(:valid?)} validates_associated :project end 

这是一个人为的例子,但与我试图做的类似。 我已经看了一下accepts_nested_attributes_for做了什么,它使用了构建方法,我认为它会将构建的属性与项目相关联。

我还查看了accepts_nested_attributes_for子关联validation失败 ,它给了我validates_presence_of :unless=>valid?

有关如何使其工作的任何想法?

validates_associated看起来比它的价值更麻烦。 如果删除validates_presence_of:project_id,则示例有效。 这是一个恢复validation的hacky示例(在此处找到描述)。

 class ProjectAttribute < ActiveRecord::Base belongs_to :project validates_presence_of :name validates_uniqueness_of :name, :scope => :project_id validates_presence_of :project_id, :unless => Proc.new { |project_attribute| project = project_attribute.project ObjectSpace.each_object(Project) {|o| project = o if o.project_attributes.include?(project_attribute)} unless project project } end 

只需在project_id上添加非null约束,如果发生了时髦的事情,就让它爆炸。 哦,并确保您的测试覆盖率也很好。