如何在初始化模型之前创建用户

时间:2011-09-06 06:59:25

标签: ruby-on-rails-3 factory-bot

在我的模型(产品)中,我有一个验证,每个产品应该有一个有效的所有者(用户的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创建产品时 产品未创建,并显示验证消息(“User1不是有效的所有者名称”)。

深入挖掘后我发现了

  1. 问题出现在我的模型中。
  2. 我有一个验证(validates_inclusion_of:owner,:in => User.first.login_id),它在factory.rb中创建模拟用户之前初始化, (到目前为止,在数据库中没有创建用户,在执行factory.rd时模型初始化后创建用户)
  3. 我的问题是: 1.如何在初始化模型之前创建用户。

2 个答案:

答案 0 :(得分:0)

您是否可以创建用户对象,然后将该对象传递给产品工厂?这应该创建一个有效的用户,然后通过所有者关联提供它并使产品有效。

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

这个用户显然也必须是第一个用户?因此,如果您有现有的用户对象,则可以在创建第一个用户之前尝试清除所有用户。

User.delete_all

答案 1 :(得分:0)

我按如下方式解决了这个问题:

在我的模型中,我通过编写自定义验证方法替换了'Rails验证'。在创建“产品”时将调用此自定义验证方法。

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