has_one关联和Factory Girl的任意属性错误

3
我正在为我正在开发的Rails应用构建一个基本购物车。 没有什么特别的, - 购物车有许多line_item - 每个line_item与一个product相关联,并带有一个数量
 class Cart < ActiveRecord::Base
   attr_accessible :line_items
   has_many :line_items, :dependent => :destroy
 end

 class LineItem < ActiveRecord::Base
   attr_accessible :quantity, :product

   belongs_to :cart
   has_one :product
 end

我正在尝试使用RSpec测试这个关联,但是我做错了什么,因为我收到一个错误,上面写着:DEPRECATION WARNING: You're trying to create an attribute 'line_item_id'. Writing arbitrary attributes on a model is deprecated,我不确定为什么。
在我的factories.rb文件中,我定义了line_item工厂,如下所示:
factory :line_item do
  quantity { Random.rand(1..5) }
  product
end

factory :cart do
  factory :cart_with_two_line_items do
    ignore do
      line_item_count 2
    end

    after(:create) do |cart, evaluator|
      FactoryGirl.create_list(:line_item, evaluator.line_item_count, cart_id: cart) # < 104
    end
  end
end

请问我哪里做错了,可能是一些基础问题,但我还是Rspec的新手。提前感谢。

编辑:line_item_spec.rb

require 'spec_helper'

describe LineItem do
before do
  @line_item = FactoryGirl.create(:line_item)
end
1个回答

3
也许您忘记在产品模型中声明关联。
class Product < Activerecord::Base
  belongs_to :line_item

belongs_to会期望你的products表格中有一个名为:line_item_id的列。你是否已经运行了迁移并修改了模型?


这个文件的第104行是什么代码?请粘贴相关代码,并在附近添加一些注释以指示第104行。 - Salil
嗨@Salil,感谢您的持续帮助。我已经突出了第104行,但您可能需要向右滚动才能看到它。我还在line_item_spec.rb的第5行中创建Factory时遇到错误,我也添加了这一行。抱歉没有早点添加这些信息。 - purpletonic
你在修改产品后运行了数据库迁移吗?belongs_to会期望你的产品表有一列名为: line_item_id。 - Salil
不得不这样做,并修改迁移,然后出于某些原因,我还必须删除并运行db:migrate(db:setup未能识别更改,不知道为什么),然后在运行db:test:prepare并重新启动guard后,它开始工作了...真是一个麻烦的过程。无论如何,现在解决了,非常感谢你的帮助! - purpletonic
1
db:migrate 只会修改开发数据库。是的,db:test:prepare 是用来构建测试数据库的。所以,难怪它起了作用。 :) - Salil
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接