2011-09-06 30 views
0

的初始化之前用戶在我的模型(產品),我有一個驗證,每個產品應該有一個有效的所有者(用戶LOGIN_ID)我如何能夠創造模型

validates_presence_of :owner 
validates_inclusion_of :owner, :in => User.first.login_id, :message => "%{value} is not a valid owner name" 

我想使用工廠女孩創建產品模擬對象

用於創建新產品我需要用戶的login_id。 要這樣做,我已創建一個用戶。

達到這一切都是好的,但是當我試圖創建一個產品使用該用戶的login_id 產品不是創建,並顯示驗證消息(「用戶1不是有效的所有者名稱」)。

挖掘到更深之後,我發現,

  1. 問題從驗證出現在我的模型。
  2. 我有一個驗證(validates_inclusion_of:owner,:in => User.first.login_id),它在factory.rb中創建模擬用戶之前進行初始化, (直到那時沒有用戶在數據庫中創建,用戶被創建在執行factory.rd模式初始化後

我的問題是: 1.如何能夠在模型初始化之前創建用戶。

回答

0

我解決這個問題如下:

在我的模型我已經通過編寫自定義的驗證方法取代了「Rails的驗證」。這個自定義驗證方法將在創建'Product'時被調用。

validates_presence_of :owner 
validate :owner_should_be_registered_user 

def owner_should_be_registered_user 
    if !User.all_user.include? owner and !owner.nil? 
     errors.add(:owner, "is not a valid user") 
    end 
    end 
0

您是否可以不創建用戶對象,然後將該對象傳遞給您的產品工廠?這應該創建一個有效的用戶,然後通過所有者關聯提供它並使產品有效。

user = Factory(:user, :name => "User1") 
product = Factory(:product, :owner => user) 

該用戶顯然必須是第一個用戶嗎?所以,如果你有現有的用戶對象,那麼你可以在創建第一個用戶之前嘗試清除所有用戶。

User.delete_all 
+0

此用戶不必是第一個用戶,它可以是任何註冊用戶。如果我按照你的要求,我有以下錯誤:ArgumentError:未註冊:產品 /usr/local/lib/ruby/gems/1.9.1/gems/factory_girl-2.0.4/lib/factory_girl/registry.rb:15 :在'find' /usr/local/lib/ruby/gems/1.9.1/gems/factory_girl-2.0.4/lib/factory_girl.rb:42:in'factory_by_name' /usr/local/lib/ruby /gems/1.9.1/gems/factory_girl-2.0.4/lib/factory_girl/syntax/vintage.rb:53:in'default_strategy' /usr/local/lib/ruby/gems/1.9.1/gems/factory_girl -2.0.4/lib/factory_girl/syntax/vintage.rb:146:在'Factory'中 – suvankar

相關問題