Has_many :through a belongs_to association


#1

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


#2

On Tue, Oct 14, 2008 at 4:27 PM, Walther D.
removed_email_address@domain.invalid 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!


#3

Pratik Naik wrote:

On Tue, Oct 14, 2008 at 4:27 PM, Walther D.
removed_email_address@domain.invalid 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!

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


#4

Walther D. wrote:

Pratik Naik wrote:

On Tue, Oct 14, 2008 at 4:27 PM, Walther D.
removed_email_address@domain.invalid 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!

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


#5

Walther D. wrote:

Walther D. wrote:

Pratik Naik wrote:

On Tue, Oct 14, 2008 at 4:27 PM, Walther D.
removed_email_address@domain.invalid 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!

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 methodrender_file’ for class
`ActionView::Base’ (NameError)


#6

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

On Oct 15, 3:05 am, Walther D. <rails-mailing-l…@andreas-


#7

…/vendor/rails/activesupport/lib/active_support/core_ext/module/aliasing.rb:33:in
alias_method': undefined methodrender_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:inconstruct_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)!


#8

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


#9

@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!

On Thu, Oct 16, 2008 at 2:20 PM, Roman H.
removed_email_address@domain.invalid wrote:

doesn’t have much time right now, working on Twitter.

due to:

Before all this turns sour - I’m going to dump this branch - and hurry

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)!

Posted viahttp://www.ruby-forum.com/.


Cheers!


#10

@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.


#11

Hi all,

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

cheers
Martin


#12

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 G.

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


#13

Thanks a lot!

Roman


#14

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?


#15

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:

@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


#16

@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


#17

Anyone have a fix for this?

On Nov 13, 11:09 pm, Nicholas H. removed_email_address@domain.invalid


#18

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


#19

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.

#20

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:inconstruct_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:ininitialize’
/vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:6:in
initialize' /vendor/rails/activerecord/lib/active_record/associations.rb:1297:innew’
/vendor/rails/activerecord/lib/active_record/associations.rb:1297:in
`groups’

Any ideas?

Thx
Nick

Martin G. wrote:

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).