Ruby on rails FactoryBot未定义的方法错误
我有一个现有的工厂(订单),我正试图建立一个新的工厂,有效地继承它。看起来是这样的:Ruby on rails FactoryBot未定义的方法错误,ruby-on-rails,ruby,factory-bot,Ruby On Rails,Ruby,Factory Bot,我有一个现有的工厂(订单),我正试图建立一个新的工厂,有效地继承它。看起来是这样的: factory :order_with_domain, :parent => :order do |o| o.order_provider 'DomainNameHere' end factory :order do # ... original factory stuff trait :with_domain do order_provider 'DomainNameHere'
factory :order_with_domain, :parent => :order do |o|
o.order_provider 'DomainNameHere'
end
factory :order do
# ... original factory stuff
trait :with_domain do
order_provider 'DomainNameHere'
end
end
在这样做并使用order\u和\u domain
运行规范后,我收到了以下信息:
undefined method `order_provider=' for #<Order:0x00007fc70d9fafc0>
Did you mean? order_provider
未定义的方法'order_provider='用于#
你是说?订单供应商
如果我尝试将order\u provider
放入父工厂,我会收到相同的错误
非常感谢您的帮助
谢谢。假设您的模型有一个
order\u provider
属性或order\u provider=
方法,正如@moveson在上面评论的那样
我会用。大概是这样的:
factory :order_with_domain, :parent => :order do |o|
o.order_provider 'DomainNameHere'
end
factory :order do
# ... original factory stuff
trait :with_domain do
order_provider 'DomainNameHere'
end
end
然后使用它:
order_with_domain = FactoryBot.create(:order, :with_domain)
尝试运行
rails c test
,然后检查您的列是否存在。如果没有,那么这就是测试数据库的问题,您需要使用RAILS\u ENV=test rake db:migrate
在测试环境中运行迁移。如果什么也没有发生,请删除您的schema.rb
,然后再次运行migrations命令。尝试将值放在大括号中,如下所示:
factory:order_与_域,:parent=>:order do|o|
o、 订单_提供程序{'DomainNameHere'}
结束
以下是原因您的订单模型是否具有订单提供者属性?如果没有,它是否会提供一个通用的
未定义方法
错误,而不是告诉我尝试订单提供者
?在控制台中,我可以调用order.order\u provider
并获取我需要的。好的,看来您可能有一个getter(order\u provider
),但没有setter(order\u provider=
)。请编辑您的问题以显示订单模型的代码。@IainK它确实为您提供了一个通用的NoMethodError
恰巧dod\u您的意思是
找到了一个类似的方法名称并提供了一个建议。就像“S”一样。黑猩猩问我是指chomp
还是chomp
几乎可以肯定你没有定义#order\u provider=
(这是一种不同于#order\u provider
)的方法。我同意这是一个很好的特性用例,但如果没有order#order\u provider=
的方法,它就不会起作用。没有order\u provider=
方法。查看OP的错误消息。这当然是可能的,但如果order\u provider
不是模型上的属性,则不常见。