我试图测试多态关联。
我正在使用RSpec 3.0.2和shoulda-matcher 2.6.2。我的Rails版本是:4.1.4和Ruby 2.1.2
我的第一个模型:app / models / address.rb
class Address < ActiveRecord::Base
belongs_to :addressable, polymorphic: true
end
我的第二个模型:app / models / user.rb
class User < ActiveRecord::Base
has_many :addresses, as: :addressable
end
我的第三个模型:app / models / company.rb
class Company < ActiveRecord::Base
has_many :addresses, as: :addressable
end
对于地址表,我有这个迁移:
class CreateAddresses < ActiveRecord::Migration
def change
create_table :addresses do |t|
t.string :description
t.references :addressable, polymorphic: true
t.timestamps
end
end
end
对于我的第一个规范,我有:spec / models / address_spec.rb
require 'rails_helper'
RSpec.describe Address, :type => :model do
it { should belong_to :addressable }
end
但是当我尝试运行规范时,我遇到了这个错误:
故障:
1)地址应属于可寻址的 失败/错误:它{should belongs_to:addressable} 有一个名为addressable的belongs_to关联的预期地址(Address没有addressable_id外键。) './spec/models/address_spec.rb:4:in'块(2级)'
通过迁移生成表格:
请你帮我确定一下我失踪的地方。我只是从谷歌看到stackoverflow,但没有解决方案。
答案 0 :(得分:2)
addressable_id
列不在您的测试数据库中。运行:
bundle exec rake db:test:clone
将数据库更改同步到测试数据库。