【问题标题】:How to use FactoryGirl to create an attribute called "alias"?如何使用 FactoryGirl 创建一个名为“alias”的属性?
【发布时间】:2012-02-16 10:46:32
【问题描述】:

我只是想知道是否可以使用 FactoryGirl 创建一个名为“alias”的属性,因为 alias 是 Ruby 中的保留字。

FactoryGirl.define do
  factory :blah do
    name "dummy"
    alias "dummy"
  end
end

我尝试了各种逃避事物的组合,但无法获得任何有用的工作。

【问题讨论】:

    标签: ruby factory-bot


    【解决方案1】:

    Ruby 不知道您是在尝试调用名为alias 的方法还是将一个方法别名为另一个方法,并且默认为后者。您可以通过这样做来消除歧义

    self.alias "dummy"
    

    即,通过明确指定接收者。这通常是在其他情况下的方式,无论您是调用方法还是执行其他操作,例如

    self.foo = 'bar'
    

    调用foo= 方法而不是创建一个名为 foo 的局部变量。

    对于small number of field names,这是行不通的。 Factory girl 的 DSL 使用 method_missing,所以如果 DSL 对象有一个同名的方法,它将被调用。在这些情况下,您可以做 DSL 糖正常为您做的事情并直接致电 add_attribute

    FactoryGirl.define do
      factory :blah do
        add_attribute :name, "some value"
      end
    end
    

    一样
    FactoryGirl.define do
      factory :blah do
        name "some value"
      end
    end
    

    【讨论】:

    • 使用self.alias 成功了。我很肯定我已经尝试过了。 (-:谢谢!
    • 只是在我的模型有一个名为“end”的属性时遇到了这个问题。 self.end 让它工作。
    【解决方案2】:

    factory .. do 块定义一个变量并在其上调用方法。

    FactoryGirl.define do
      factory :blah do |f|
        f.name "dummy"
        f.alias "dummy"
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多