如何使用FactoryGirl创建一个名为"别名"的属性?

Tim*_*ter 21 ruby factory-bot

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

FactoryGirl.define do
  factory :blah do
    name "dummy"
    alias "dummy"
  end
end
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*ung 34

Ruby不知道你是在尝试调用一个方法,alias还是将一个方法作为另一个方法,而默认为后者.你可以做到消除歧义

self.alias "dummy"
Run Code Online (Sandbox Code Playgroud)

即,通过明确指定接收器.这通常是在其他情况下进行的方式,无论您是在调用方法还是在做其他事情,例如

self.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

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

对于少数字段名称,这将不起作用.工厂女孩的DSL使用method_missing如此,如果DSL对象具有该名称的方法,则将调用它.在这些情况下,您可以执行DSL sugar normal为您执行的操作并add_attribute直接调用:

FactoryGirl.define do
  factory :blah do
    add_attribute :name, "some value"
  end
end
Run Code Online (Sandbox Code Playgroud)

是相同的

FactoryGirl.define do
  factory :blah do
    name "some value"
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 刚出现这个问题,我的模型有一个名为"end"的属性.`self.end`让它发挥作用. (4认同)
  • 该死的,这对于名为`method`的字段不起作用. (3认同)
  • 使用`self.alias`就可以了.我很肯定我已经尝试过了.(-: 谢谢! (2认同)