【问题标题】:How do I able to create a user before initialization of model如何在模型初始化之前创建用户
【发布时间】:2011-09-06 06:59:25
【问题描述】:

在我的模型(产品)中,我有一个验证,每个产品都应该有一个有效的所有者(用户的登录 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 时模型初始化后创建的)

我的问题是: 1. 如何在模型初始化之前创建用户。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    User.delete_all
    

    【讨论】:

    • 该用户不必是第一个用户,可以是任何注册用户。如果我按照您的要求进行操作,则会收到以下错误: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:indefault_strategy' /usr/local/lib/ruby/gems/1.9.1/gems/factory_girl-2.0.4/lib/factory_girl/syntax/vintage.rb:146:in Factory'
    【解决方案2】:

    我这样解决这个问题:

    在我的模型中,我通过编写自定义验证方法替换了“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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2016-11-12
      • 2012-05-27
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      相关资源
      最近更新 更多