https://github.com/chrislerum/factory I tried whipping up an app with your code, the controller test passes fine for me, see if it works for you and compare.
On Wednesday, April 29, 2015 at 10:32:47 AM UTC-4, Rafael Adel wrote: > > I'm trying to create a `photo` factory that's in a many to one association > with `gallery`. And I'm getting two errors, depending on how I specify the > association between those two models. > > Here's the models: > > *Photo* > > belongs_to :gallery, class_name: "SevenGallery::Gallery" > > *Gallery* > > has_many :photos, class_name: "SevenGallery::Photo", foreign_key: > "seven_gallery_gallery_id", dependent: :destroy > > > > And the migrations > > > create_table :seven_gallery_galleries do |t| > t.string :title > t.timestamps null: false > end > > create_table :seven_gallery_photos do |t| > t.string :caption > t.string :image > t.references :seven_gallery_gallery, index: true > t.timestamps null: false > end > > > add_foreign_key :seven_gallery_photos, :seven_gallery_galleries, > on_delete: :cascade > > > > Now Here's my factories: > **Gallery**: > > > FactoryGirl.define do > factory :gallery, class: 'SevenGallery::Gallery' do > title "an event gallery" > factory :gallery_with_photos do > after(:build) do |gallery| > gallery.photos << FactoryGirl.create(:photo_one, > seven_gallery_gallery_id: gallery) > gallery.photos << FactoryGirl.create(:photo_two, > seven_gallery_gallery_id: gallery) > gallery.photos << FactoryGirl.create(:photo_three, > seven_gallery_gallery_id: gallery) > end > end > end > end > > > And **Photo**: > > > FactoryGirl.define do > factory :photo, class: "SevenGallery::Photo" do > > factory :photo_one do > end > > factory :photo_two do > end > > factory :photo_three do > end > > factory :photo_with_gallery do > gallery > end > end > end > > > > And here's the controller spec that generates the error: > > > it "changes is_main to true in self and false in rest" do > photo_one = FactoryGirl.create(:photo_with_gallery) > expect(photo_one.gallery).to be_a SevenGallery::Gallery > end > > > Whenever I run the test I get this error: > > > Failure/Error: photo_one = FactoryGirl.create(:photo_with_gallery) > ActiveModel::MissingAttributeError: > can't write unknown attribute `gallery_id` > # ./spec/controllers/seven_gallery/photos_controller_spec.rb: > > When I change the association part to be: > > > factory :photo_with_gallery do > association :gallery, factory: gallery > end > > I get this error: > > > Failure/Error: photo_one = FactoryGirl.create(:photo_with_gallery) > NoMethodError: > undefined method `name' for :photo_with_gallery:Symbol > # ./spec/controllers/seven_gallery/photos_controller_spec.rb:8 > > > **Backtrace**: > > > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/attribute.rb:138:in > > `with_value_from_database' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/attribute_set.rb:39:in > > `write_from_user' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/attribute_methods/write.rb:74:in > > `write_attribute_with_type_cast' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/attribute_methods/write.rb:56:in > > `write_attribute' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/attribute_methods/dirty.rb:96:in > > `write_attribute' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/attribute_methods.rb:373:in > > `[]=' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/associations/belongs_to_association.rb:83:in > > `replace_keys' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/associations/belongs_to_association.rb:14:in > > `replace' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/associations/singular_association.rb:17:in > > `writer' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/associations/builder/association.rb:123:in > > `gallery=' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:16:in > > `public_send' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:16:in > > `block (2 levels) in object' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:15:in > > `each' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:15:in > > `block in object' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:14:in > > `tap' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/attribute_assigner.rb:14:in > > `object' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/evaluation.rb:12:in > > `object' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:9:in > > `result' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/factory.rb:42:in > > `run' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:23:in > > `block in run' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/notifications.rb:166:in > > `instrument' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:22:in > > `run' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/strategy_syntax_method_registrar.rb:20:in > > `block in define_singular_strategy_method' > # > ./spec/controllers/seven_gallery/photos_controller_spec.rb:8:in `block (3 > levels) in <module:SevenGallery>' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:177:in > > `instance_exec' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:177:in > > `block in run' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:385:in > > `block in with_around_and_singleton_context_hooks' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:343:in > > `block in with_around_example_hooks' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/hooks.rb:474:in > > `block in run' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/hooks.rb:614:in > > `block in run_around_example_hooks_for' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:247:in > > `call' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:247:in > > `call' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-rails-3.2.1/lib/rspec/rails/example/controller_example_group.rb:179:in > > `block (2 levels) in <module:ControllerExampleGroup>' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:333:in > > `instance_exec' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:333:in > > `instance_exec' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/hooks.rb:387:in > > `execute_with' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/hooks.rb:616:in > > `block (2 levels) in run_around_example_hooks_for' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:247:in > > `call' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:247:in > > `call' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-rails-3.2.1/lib/rspec/rails/adapters.rb:113:in > > `block (2 levels) in <module:MinitestLifecycleAdapter>' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:333:in > > `instance_exec' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:333:in > > `instance_exec' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/hooks.rb:387:in > > `execute_with' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/hooks.rb:616:in > > `block (2 levels) in run_around_example_hooks_for' > # > /home/rafael/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/rspec-core-3.2.3/lib/rspec/core/example.rb:247:in > > `call' > # /home/rafael/ > ... -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/0407c420-167c-428d-8479-ff13513054b6%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

