创建具有belongs_to和validates_presence_of验证的对象的正确方法是什么?

时间:2011-01-27 09:31:23

标签: ruby-on-rails activerecord belongs-to

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

这是我的代码:

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

这似乎有点不必要 - 有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

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

我希望它会有所帮助。

答案 1 :(得分:0)

您想通过表单创建对象吗?如果你那么我会建议使用build方法和accepts_nested_attributes - 这将允许你同时创建父对象和子对象。我想在做这件事时通常会提到Ryan's post