I can see the only difference is that in my case there's namespace in front of the table names and FK. But in yours there's none since it's a normal app. But is this the cause ?
On Wednesday, April 29, 2015 at 6:53:18 PM UTC+3, Chris Lerum wrote: > > 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/2809a17b-a3a0-43ce-918a-829502c164ab%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

