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

时间:2012-06-18 21:06:34

标签: ruby-on-rails-3 rspec rspec2 factory-bot rspec-rails

我正在尝试为我正在开发的Rails应用构建一个基本的购物车。

没什么特别的,
- 购物车有很多line_items
- 每个line_item has_one产品关联,数量与之相关

 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 个答案:

答案 0 :(得分:3)

也许您忘记在产品模型中声明关联。

class Product < Activerecord::Base
  belongs_to :line_item

belongs_to会期望您的products表有一列:line_item_id。您是否已运行迁移并修改了模型?