【发布时间】:2012-07-03 02:01:01
【问题描述】:
我有一个 Rails 控制器的规范,用于测试关联模型的创建:
型号:
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
attr_accessible :foo, :foo_id
end
控制器规格:
@foo = FactoryGirl.create(:foo)
expect {
post :create, { bar: FactoryGirl.attributes_for(:bar, foo_id: @foo.id )}
}.to change(Bar, :count).by(1)
如果我将此规范更改为不必将foo_id 批量赋值的形式,它会与ActiveRecord::AssociationTypeMismatch expected Foo got String 中断:
@foo = FactoryGirl.create(:foo)
expect {
post :create, { bar: FactoryGirl.attributes_for(:bar, foo: @foo )}
}.to change(Bar, :count).by(1)
和
describe Bar do
it { should_not allow_mass_assignment_of(:foo_id) }
end
Controller 代码很简单:
def create
@bar = Bar.new(params[:bar])
if @bar.save
redirect_to @bar
else
render action: 'new'
end
end
有没有办法让规范运行而不使foo_id 可访问?
【问题讨论】:
标签: ruby-on-rails activerecord rspec factory-bot