Not sure how useful this is, but I get it working if I change the table 
names to 'galleries' and 'photos'.
updated: https://github.com/chrislerum/factory

On Wednesday, April 29, 2015 at 1:59:04 PM UTC-4, Rafael Adel wrote:
>
> 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 rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/f81b02e1-cc47-4d30-87b7-1843438a1b99%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to