関連するモデルの作成をテストする 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
コントローラーのコードは非常に単純です。
def create
@bar = Bar.new(params[:bar])
if @bar.save
redirect_to @bar
else
render action: 'new'
end
end
アクセス可能にせずに仕様を実行する方法はありfoo_id
ますか?