我有两个简单的模型:
class Idea << ActiveRecord::Base
has_many :tasks
# for nesting....
accepts_nested_attributes_for for :tasks
attribute_accessible :tasks_attributes
end
class Task << ActiveRecord::Base
belongs_to :idea
validates_presence_of :idea # this line is causing pain
end
我发送以下JSON来创建我的IdeasController:
{
"description":"Test test test",
"tasks":[{"description":"test test test"}]
}
...我得到了验证错误。一旦我删除验证,一切顺利!
有什么建议吗?
答案 0 :(得分:1)
定义反向关联有助于:
class Idea << ActiveRecord::Base
has_many :tasks, inverse_of: :idea # here...
accepts_nested_attributes_for :tasks
attribute_accessible :tasks_attributes
end
class Task << ActiveRecord::Base
belongs_to :idea, inverse_of: :tasks # ... and here
validates_presence_of :idea
end
验证失败的原因是,在此修复之前,关联是单向的:当您尝试到达任务的idea
时,而不是使用用于通过其想法完成任务的关联代理,它会创建另一个没有意识到这个想法存在的协会代理(抱歉,这有点难以解释)。
另外,请务必使用validates_presence_of :idea
而不是validates_presence_of :idea_id
。此外,您应该在json中使用tasks_attributes
而不是tasks
。