【发布时间】:2011-01-07 08:18:20
【问题描述】:
我有 Rails 模型的嵌套属性,并且由于某种原因关联验证失败。我没有使用accepts_nested_attributes_for,但我正在做一些非常相似的事情。
class Project < ActiveRecord::Base
has_many :project_attributes
def name
project_attributes.find_by_name("name")
end
def name=(val)
attribute = project_attributes.find_by_name("name")
if attribute
attribute.value = val
else
project_attributes.build(:name=>"name", :value=>val)
end
end
end
class ProjectAttribute < ActiveRecord::Base
belongs_to :project
validates_presence_of :name
validates_uniqueness_of :name, :scope => :project_id
validates_presence_of :project_id, :unless => lambda {|attribute| attribute.project.try(:valid?)}
validates_associated :project
end
这是一个人为的例子,但与我正在尝试做的类似。我查看了 accept_nested_attributes_for 的作用,它使用了 build 方法,我认为该方法会将 build 属性与项目相关联。
我还查看了accepts_nested_attributes_for child association validation failing,它给了我validates_presence_of :unless=>valid?
关于如何让它发挥作用的任何想法?
【问题讨论】:
-
我尝试将其更改为使用 Accepts_nested_attributes_for 并且遇到了同样的问题。在 validates_presence_of :project_id 调用“项目”返回 nil。
标签: ruby-on-rails validation activerecord nested associations