has_many :through a belongs_to association

I am on Rails 2.0.2 (not 2.1.x due to a couple of tickets) and if this topic is invalid if only I upgraded, please excuse me for not being able to have a perfect overview :frowning:

My use case is: users are invited to events - and each event is scheduled to 'perform' a number of times. This gives me the tables: users, scheduled_events, event_users.

I have set up associations on the models like this:

- events has_many scheduled_events - scheduled_events belongs_to event - event_users belongs_to event and belongs_to user

Then I've tried to set up an association providing me with the scheduled events to an invited user like this

- event_users has_many scheduled_events through event

But after googling about for the better part of a day and reading Josh Susser extensively, I am lead to believe that has_many through only works on has_many associations - ie. I'm not at liberty to go through a belongs_to association.

Does anyone here have a take on how to solve this? Or am I perhaps just messing this association thing up?

best regards, Walt

This should work fine in Edge. Did you try to upgrade to edge ?

Pratik Naik wrote:

But after googling about for the better part of a day and reading Josh Susser extensively, I am lead to believe that has_many through only works on has_many associations - ie. I'm not at liberty to go through a belongs_to association.

Does anyone here have a take on how to solve this? Or am I perhaps just messing this association thing up?

This should work fine in Edge. Did you try to upgrade to edge ?

-- Cheers! - Pratik http://m.onkey.org

I'm overwhelmed - did not even dare to hope for any replies - and certainly not this fast!

I am adding to a production site on 2.0.2 - and I have not been able to find any good docs on how to upgrade to edge on my mac and still have my 2.0.2 development environment intact (it is _very_ important to me that my existing 2.0.2 does work and will let me deploy to 2.0.2 production sites)

Is that possible? Upgrading on my development mac - and still deploy to 2.0.2 production? And perhaps even - downgrading again - should the upgrade turn out to hold to many TODOS?

thank you Pratik - I've come around your name on a great many posts, tickets etc and I'm amased at the amount of work you put into this community!

thank you again, walt

Walther Diechmann wrote:

Pratik Naik wrote:

But after googling about for the better part of a day and reading Josh Susser extensively, I am lead to believe that has_many through only works on has_many associations - ie. I'm not at liberty to go through a belongs_to association.

Does anyone here have a take on how to solve this? Or am I perhaps just messing this association thing up?

This should work fine in Edge. Did you try to upgrade to edge ?

-- Cheers! - Pratik http://m.onkey.org

I'm overwhelmed - did not even dare to hope for any replies - and certainly not this fast!

I am adding to a production site on 2.0.2 - and I have not been able to find any good docs on how to upgrade to edge on my mac and still have my 2.0.2 development environment intact (it is _very_ important to me that my existing 2.0.2 does work and will let me deploy to 2.0.2 production sites)

Is that possible? Upgrading on my development mac - and still deploy to 2.0.2 production? And perhaps even - downgrading again - should the upgrade turn out to hold to many TODOS?

thank you Pratik - I've come around your name on a great many posts, tickets etc and I'm amased at the amount of work you put into this community!

thank you again, walt

Pratik,

I'll try the "freeze rails"-thing and see if that will do the trick :slight_smile:

thank you again, walt

Walther Diechmann wrote:

Walther Diechmann wrote:

Pratik Naik wrote:

But after googling about for the better part of a day and reading Josh Susser extensively, I am lead to believe that has_many through only works on has_many associations - ie. I'm not at liberty to go through a belongs_to association.

Does anyone here have a take on how to solve this? Or am I perhaps just messing this association thing up?

This should work fine in Edge. Did you try to upgrade to edge ?

-- Cheers! - Pratik http://m.onkey.org

I'm overwhelmed - did not even dare to hope for any replies - and certainly not this fast!

I am adding to a production site on 2.0.2 - and I have not been able to find any good docs on how to upgrade to edge on my mac and still have my 2.0.2 development environment intact (it is _very_ important to me that my existing 2.0.2 does work and will let me deploy to 2.0.2 production sites)

Is that possible? Upgrading on my development mac - and still deploy to 2.0.2 production? And perhaps even - downgrading again - should the upgrade turn out to hold to many TODOS?

thank you Pratik - I've come around your name on a great many posts, tickets etc and I'm amased at the amount of work you put into this community!

thank you again, walt

Pratik,

I'll try the "freeze rails"-thing and see if that will do the trick :slight_smile:

thank you again, walt

'shoot - I'll better stay of the freezing path - what started out as a small Just-Let-Me-Fix-That-Association-For-You turned into a I-Cannot-Start-My-Project-Due-To-Missing-Methods-On-Core :frowning:

So, I froze - and the project likewize <:)

First missing method is render_file - and I'm afraid that once I get that 'son of gun nailed', edge has a queue of missing things built up for me!

Too bad though - I really could have used that hmt belongs_to ...

I cloned the rails.git off of github into its own folder, then symlinked it into vendor/rails on my project.

Then I did script/server --debugger as usual - and it chokes with:

../vendor/rails/activesupport/lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method': undefined method `render_file' for class `ActionView::Base' (NameError)

../vendor/rails/activesupport/lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method': undefined method `render_file' for class `ActionView::Base' (NameError)

Chalked this one up on me not keeping tabs on inherit_views plugin which orignally manhandled the render_file method - upgrading that plugin had me move on...

- to the next problem: mislav_will_paginate (which he will not in edge due to:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:319:in `activate':gem::Exception: can't activate activesupport (>= 1.4.4), already activated activesupport-2.2.0]

but that's not a problem - I commented these two dirty rotten scoundrels:

gem 'mislav-will_paginate', '~> 2.2' require 'will_paginate'

and off to the races, I was - in my script/console - eager to see the promised land of has_many through a belongs_to.

Only to see this:

undefined method `quoted_table_name' for false:FalseClass from .../vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:123:in `construct_conditions'

Before all this turns sour - I'm going to dump this branch - and hurry back in the comforting shadows of 2.0.2 with my original plugins intact.

The has_many on a belongs_to?

I did the utmost unDRYness I could come u with:

on my user I did

- has_many :event_users - has_many :invitations, :through => :event_users, :source => :event

and then on my events_controller - I stabbed this into the find_resource enclosing_resource.invitations.collect { |i| i.scheduled_events.month_year(fd,ld) }.flatten

case closed (for me - but I still shiver from the tour de force into the freeze)!

Just had the same unpleasant experience with bleeding edge, looks like too much trouble... wanted the upcoming internationalization backed into Rails directly, though. Sigh...

Just spent couple of hours debugging it.... Well, Rails-Edge alone seems to work fine, so I figured out it should be some plugin, deactivating them one at a time I found out, that it is

has_many_polymorphs,

that doesn't like Edge and has_many-through-Associations.

Well, maybe it's time to say goodbye? Guess, Evan from http://blog.evanweaver.com/ doesn't have much time right now, working on Twitter.

Cheers, Roman

@Walt Hey, sorry I got busy and couldn't look at this thread.

@Roman : If you could mention the exact issues, I could fix has_many_polymorphs plugin. Or if you can submit a patch, that works the best!

@Pratik: Thanks! I created a github project to showcase the issue:

http://github.com/mindreframer/hmp_and_edgerails_2.2/tree/master

Hope, that's OK.

Hi all,

I fixed this issue, it's available at http://github.com/snusnu/has_many_polymorphs/tree/master

cheers Martin

Thanks a lot!

Roman

Pratik Naik wrote:

@Walt Hey, sorry I got busy and couldn't look at this thread.

@Pratik - no problem :slight_smile:

I will have to feel my way into this edge business (and not bag a bundle of plugins along on the ride) :smiley:

But thank you even so for caring and your time!

@Martin Gamsjaeger

Thank you too! I have put your hmp top of my "clone-list" for when I dare threading into deep freeze edge waters next time :smiley:

best regards, walt

Martin,

Your fix seems to address some of the issues, but calling the the polymorphic association class still raises the same:

NoMethodError undefined method `macro' for false:FalseClass

For example

Site has Tags through Taggings

calling Tag.taggables raises the above error

Any ideas?

@edvin: Tag-related: http://github.com/tejo/has_many_polymorphs/commit/a3710a131e0bcfc1d1939f28246f4e9f60732835

I'm porting a 1.2.6 app to 2.2.0 and found that using Martin Gamsjaeger's fork fixed most HMP issues though I still get the method error for 'macro' as you do. Can't quite figure it out. Anyone else get it? I'm not seeing any forks on Github dealing with the error.

Ed

I've tried a couple of forks on Github as well with no luck. Would love to see this work on Rails 2.2 as well.

Nicholas

ed wrote:

Anyone have a fix for this?

Hey,

Sorry I didn't get back to that thread for so long! I must have overlooked it ... maybe because my fix is still working for me (using rails-2.2.2, but using mostly my own additional methods). That said, I'm not really sure how to reproduce the error you guys get. Maybe it's a good idea to put a sample app that triggers the error up on github? I could have a look tommorrow evening, although I must say that I really don't know too much about the plugins code! I just noticed a method in hmp that is an almost exact duplicate of a rails method, and updated hmp's one to reflect the latest rails code (that basically was the last fix).

Besides that, my commit got pulled back into the main repo at http://github.com/fauna/has_many_polymorphs/tree/master recently. Maybe this means that the original author might be available for action :-)?

Anyways, a sample barebone rails-2.2.2 app on github that showcases the error would help!

cheers snusnu

I'm using the latest patched version of hmp, however I'm still receiving this:

NoMethodError (undefined method `quoted_table_name' for false:FalseClass):     /vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:123:in `construct_conditions'     /vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:191:in `construct_sql'     /vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:21:in `initialize'     /vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:6:in `initialize'     /vendor/rails/activerecord/lib/active_record/associations.rb:1297:in `new'     /vendor/rails/activerecord/lib/active_record/associations.rb:1297:in `groups'

Any ideas?

Thx Nick

Martin Gamsjaeger wrote:

This commit fixes the 2.2 compatibility issue: http://github.com/lennart/has_many_polymorphs/commit/bb7e659cf870add3041b5cfaea187857ba388bff

Also see http://rubyforge.org/forum/forum.php?thread_id=29515&forum_id=16450

- Niels.

jko170 wrote: