Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails FactoryBot未定义的方法错误_Ruby On Rails_Ruby_Factory Bot - Fatal编程技术网

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
不是模型上的属性,则不常见。