假设我有一个模型
class Vehicle < ActiveRecore::Base
after_initialize :set_ivars
def set_ivars
@my_ivar = true
end
end
在代码中其他地方,我会执行类似于@vehicle.instance_variable_set(:@my_ivar,false)的操作
然后使用该Ivar确定运行哪些验证。
如何将此Ivar传递给FactoryGirl?
FactoryGirl.define do
factory :vehicle do
association1
association2
end
end
如何在创建后保存前将ivar_set编码到上面的代码中?如何将它传递到FactoryGirl.create()
中?
2条答案
按热度按时间hgncfbus1#
5us2dqdw2#
回答有点晚了,不过我需要在模型上设置一个示例变量。由于上面的答案不适用于最新版本的工厂机器人,我做了一些研究,发现下面的方法对我有效:
它几乎与上面的答案相同,但它使用了
transient
关键字而不是ignore
,我假设这是ignore
的就地替换。它所做的是允许定义一个变量,你可以将它传递给工厂,但最终不会在结果对象上设置它。这反过来又给了你一个机会,基于它来做逻辑。就像我们在这个例子中所做的(尽管很简单),我们基于提供的 transient 变量来设置一个示例变量。
请注意,在赋值器变量中设置并提供了 transient 变量。
参考文献: