我想创建一个对象,它既验证父对象的存在又验证父对象的有效性。但是我想独立于父对象创建它,我不知道该怎么做。
这是我的代码:
class User
has_many :questions
end
class Question
belongs_to :user
validates_presence_of :user
validates_associated :user
end
我知道我可以这样做:
u = User.create
q = u.questions.create
但我需要这样做
u = User.create
q = Question.create(:user_id => u.id)
q.valid?
=> false
q.errors?
=> <OrderedHash {:user=>["can't be blank"]}>
处理此问题的正确方法是什么?
我应该使用
class User
...
before(:save) do
self.user = User.find(self.user_id)
end
end
这似乎有点不必要 - 有更好的方法吗?
答案 0 :(得分:3)
您应该在问题模型中使用validates_the_presence_of :user_id
而不是validates_presence_of :user
。
我希望它会有所帮助。
答案 1 :(得分:0)
您想通过表单创建对象吗?如果你那么我会建议使用build方法和accepts_nested_attributes - 这将允许你同时创建父对象和子对象。我想在做这件事时通常会提到Ryan's post。