Ruby 工厂机器人可以';“创造”一词;项目“;工厂
我在一个项目中写了几个工厂。除了Ruby 工厂机器人可以';“创造”一词;项目“;工厂,ruby,factory-bot,Ruby,Factory Bot,我在一个项目中写了几个工厂。除了项目工厂之外,所有这些都可以工作 在rails控制台中运行工厂时,出现以下错误 FactoryBot.create(:project) NoMethodError: undefined method `name' for :project:Symbol from /home/user/.rvm/gems/ruby-2.3.6/gems/factory_bot-4.11.1/lib/factory_bot/declaration/implicit.rb:11:in
项目
工厂之外,所有这些都可以工作
在rails控制台中运行工厂时,出现以下错误
FactoryBot.create(:project)
NoMethodError: undefined method `name' for :project:Symbol from /home/user/.rvm/gems/ruby-2.3.6/gems/factory_bot-4.11.1/lib/factory_bot/declaration/implicit.rb:11:in `=='
似乎不知何故,factory_bot无法将符号:project转换为它的project类
Ruby版本是2.3.6。工厂机器人是4.11.1。工厂机器人轨道也是4.11.1
这是我的项目工厂文件:
require 'faker'
FactoryBot.define do
factory :project do
name { Faker::Company.name }
product_type { Faker::Number.between(0, 1) }
sale_type { Faker::Number.between(0, 1) }
description { Faker::Lorem.sentence }
street { Faker::Address.street_name }
neighborhood { Faker::Address.community }
zip_code { Faker::Address.zip }
country { Faker::Address.country_code }
state { Faker::Address.state_abbr }
city { Faker::Address.city }
town { Faker::Address.city }
logo { Faker::Company.logo }
cover { Faker::Company.logo }
send_from_email { Faker::Internet.email }
parking_lot_cost { Faker::Number.decimal(2) }
warehouse_m2_cost { Faker::Number.decimal(2) }
association :client, factory: user
inventory_dimension_value { Faker::Number.digit }
total_m2 { Faker::Number.decimal(2) }
sales_volume_total { Faker::Number.decimal(2) }
total_units { Faker::Number.digit }
current_m2_sold { Faker::Number.decimal(2) }
sales_volume_current_sold { Faker::Number.decimal(2) }
current_units_sold { Faker::Number.digit }
sales_volume_to_sell { Faker::Number.decimal(2) }
next_list_acum { Faker::Number.decimal(2) }
from_email { Faker::Internet.email }
saved_next_list_acum { Faker::Number.decimal(2) }
settings_show_distributions_cols { Faker::Boolean.boolean }
settings_price_list_v2_enabled { Faker::Boolean.boolean }
api_token { Faker::Lorem.word }
end
end
编辑:这是projects表的数据库架构
Table "public.projects"
Column | Type | Collation | Nullable | Default
----------------------------------+-----------------------------+-----------+----------+--------------------------------------
id | integer | | not null | nextval('projects_id_seq'::regclass)
name | character varying | | |
product_type | integer | | |
sale_type | integer | | |
description | text | | |
street | character varying | | |
neighborhood | character varying | | |
zip_code | character varying | | |
country | character varying | | |
state | character varying | | |
city | character varying | | |
town | character varying | | |
logo | character varying | | |
cover | character varying | | |
send_from_email | text | | |
parking_lot_cost | double precision | | | 0.0
warehouse_m2_cost | double precision | | | 0.0
created_at | timestamp without time zone | | not null |
updated_at | timestamp without time zone | | not null |
client_id | integer | | |
inventory_dimension_value | integer | | |
total_m2 | double precision | | | 0.0
sales_volume_total | double precision | | | 0.0
total_units | integer | | | 0
current_m2_sold | double precision | | | 0.0
sales_volume_current_sold | double precision | | | 0.0
current_units_sold | integer | | | 0
sales_volume_to_sell | double precision | | | 0.0
next_list_acum | double precision | | | 0.0
from_email | character varying | | |
saved_next_list_acum | double precision | | |
settings_show_distributions_cols | boolean | | | true
settings_price_list_v2_enabled | boolean | | | false
api_token | character varying | | |
尝试在工厂描述中声明类名
FactoryBot.define do
factory :project, class: 'Project' do
...
我在我的一个现有项目中使用相同的代码创建了一个工厂,但得到了完全相同的错误。然后,我将工厂名称更改为
:projector
,再次出现同样的错误。因此,这不是一个受保护的名称问题
我最好的猜测是:
1) 添加项目后是否确保迁移测试数据库
2) 你确定你的应用程序正在连接到你列出的同一个数据库吗
我觉得这可能是因为,如果我向工厂添加了一个属性,但该属性不在其对应的表中,则错误如下:
NoMethodError: undefined method `name=' for #<Report:0x00007fc5bb065c10>
NoMethodError:for的未定义方法'name='#
因此,工厂无法对给定的符号进行常量化,这很可能意味着它没有将其识别为常量/类。看起来您指的是
关联:客户端,工厂:用户
,而不是关联:客户端,工厂::用户
(:user
应该是一个符号)
这是一条毫无帮助的错误消息。我们在中对错误消息做了一些改进,我们还有一个有待进一步改进的问题:。您在tour项目模型中是否有name属性?模型中没有,name来自数据库您可以发布tour dB方案吗?这正是问题所在。改进错误消息非常好,我相信很多人都会从中受益。谢谢。该死,在我对开发数据库做了更改之后,我忘记了回滚/迁移测试数据库。谢谢,这个答案让我想起了它。