【发布时间】:2013-12-04 12:39:32
【问题描述】:
我最近将我的 Rails 应用程序升级到 Rails 4,在我的 Rspec 测试套件中,一行代码导致错误:
ActiveRecord::StatementInvalid:
TypeError: can't cast Array to string: INSERT INTO "items" ("created_at", "date", "description", "invoice_id", "position", "price_in_cents", "quantity", "tax_rate", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
这是我的代码:
# /spec/controllers/invoices_controller_spec.rb:
require 'spec_helper'
describe InvoicesController do
before :each do
...
@invoice = FactoryGirl.create(:invoice, :project_id => @project.id, :user => @user, :items_attributes => [ FactoryGirl.attributes_for(:item) ]) # causing havoc
end
...
end
# /spec/factories.rb:
factory :invoice do
number 123
recipient { Faker::Name.name }
date { Time.zone.now.to_date }
association :user
association :project
factory :invoice_with_item do
items { |i| [i.association(:item)] }
end
end
谁能告诉我这里缺少什么?
我猜这与Invoice 类接受嵌套项这一事实有某种关系。
【问题讨论】:
-
我们知道问题的实质是什么吗? “造成严重破坏”的描述性不是很好。
-
你为什么不使用 invoice_with_items? invoice = FactoryGirl.create(:invoice_with_items, :project_id => project.id, :user => user)?无论如何,正如 Sevenseacat 所说,“造成严重破坏”对任何人都没有帮助
-
@sevenseacat:好的,添加了上面的错误信息。
-
可能是因为 item_attributes 应该是一个散列,而不是一个数组。就像从表单提交时一样。没有完整的错误,很难说。
-
@sevenseacat:不,它应该是一个数组。它在 Rails 3 中的工作方式类似,将其更改为哈希会在此处引发语法错误。
标签: ruby-on-rails rspec ruby-on-rails-4 factory-bot