2011-09-06 46 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