Ruby on Rails
Thursday, April 30, 2015
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:
-- 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.adel20@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: :destroyAnd 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: :cascadeNow 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
endAnd **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
endAnd 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
endWhenever 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
endI 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/To view this discussion on the web visit https://groups.google.com/d/--
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+unsubscribe@googlegroups.com .
To post to this group, send email to rubyonrails-talk@googlegroups.com .msgid/rubyonrails-talk/ .d53dfd82-135c-4990-b21b- 3d030accbbbc%40googlegroups. com
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+unsubscribe@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.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment