2011-01-27 24 views
2

我想創建一個對象,它既驗證父對象的存在,又驗證父對象的有效性。不過,我想創建它獨立於父對象,我不知道如何這樣做。創建同時擁有belongs_to和validates_presence_of驗證的對象的正確方法是什麼?

這是我的代碼:

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 

這似乎是不必要的雜亂 - 有沒有更好的辦法?

+1

彼得,我很好奇,如果用戶對象是由新的問題對象引用之前創建和保存。另外,爲什麼要創建與新的?這是應用程序的要求還是速記? – Nuby 2011-01-31 22:04:56

+0

努比,我只是用'創造'作爲速記。我認爲它在被引用之前被創建和保存。 – 2011-02-06 11:51:55

回答

3

您應該在問題模型中使用validates_the_presence_of :user_id而不是validates_presence_of :user

我希望這會有所幫助。

0

你想通過表單創建對象嗎?如果你是那麼我會建議使用構建方法和accepted_nested_attributes - 這將允許您同時創建父對象和子對象。當我想要這樣做時,通常會引用Ryan's post

+0

不幸的是它不是用於表單創建的,它實際上是針對一個更復雜的問題(一個具有兩個父級依賴關係的對象)。我以這種方式問這個問題的原因是它是我擁有的主要問題中最簡單的子集 – 2011-01-27 10:04:36

相關問題