https://github.com/chrislerum/factory setting table_name seems to be the sweet spot, working now
On Thursday, April 30, 2015 at 8:01:49 AM UTC-4, Chris Lerum wrote: > > you could try, in the model, self.table_name = "seven_gallery_photos" etc. > > On Thu, Apr 30, 2015 at 4:09 AM, Rafael Adel <rafael.ade...@gmail.com> > wrote: > >> Are you sure about this ? If so, is there a way to make it working >> without changing table names ? >> >> >> On Thursday, April 30, 2015 at 3:45:46 AM UTC+3, Chris Lerum wrote: >>> >>> In short, yes. See this lovely article; notice the conspicuous absence >>> of any talk of changing table names: >>> >>> http://blog.makandra.com/2014/12/organizing-large-rails-projects-with-namespaces/ >>> >>> 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 a topic in the >> Google Groups "Ruby on Rails: Talk" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/rubyonrails-talk/roj0zJgpXVs/unsubscribe >> . >> To unsubscribe from this group and all its topics, 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/d53dfd82-135c-4990-b21b-3d030accbbbc%40googlegroups.com >> >> <https://groups.google.com/d/msgid/rubyonrails-talk/d53dfd82-135c-4990-b21b-3d030accbbbc%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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/5cc48b3a-0a80-4926-9165-480cffc5ea7c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.