2

我想创建一个对象,它既验证父对象的存在又验证父对象的有效性。但是,我想独立于父对象创建它,但我不知道该怎么做。

这是我的代码:

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

这似乎不必要的混乱 - 有没有更好的方法?

4

2 回答 2

3

您可能应该validates_the_presence_of :user_id在问题模型中使用而不是validates_presence_of :user.

我希望它会有所帮助。

于 2011-01-31T18:17:46.260 回答
0

您想通过表单创建对象吗?如果你是,那么我建议使用 build 方法和 accept_nested_attributes - 这将允许你同时创建父对象和子对象。当我想这样做时,我通常会参考Ryan 的帖子。

于 2011-01-27T09:52:21.853 回答