Forum: Rails-core (closed, excessive spam) Iterating over has_many objects with the :through association together

A7bf258bf1119b6f386728079391bef0?d=identicon&s=25 danlunde (Guest)
on 2008-05-01 18:43
(Received via mailing list)
It is often the case when I iterate over an array of objects in a
has_many_through association that I want access to both the :has_many
objects and the :through objects.  There is generally something in
that join object that is useful to get at, but enumerating with the
each method, I don't have easy access to that join object.

Example:

class User < ActiveRecord::Base
   has_many :memberships
   has_many :groups, :through => :memberships
 end

# ugly way
user.groups.each do |group|
  membership = user.memberships.detect { |memberships|
memberships.group_id == group.id}
  # or
  membership = user.memberships.find(:first, :conditions =>
["memberships.group_id = ?", group.id]}
  puts "#{group.name}, #{membership.status}"
end

# a better way
user.groups.each_with_join do |group, membership|
  puts "#{group.name}, #{membership.status}"
end

I created a ticket with a patch (tested) in lighthouse:
http://rails.lighthouseapp.com/projects/8994/ticke...

Let me know what you think!

Daniel
B3bdacd9384d4e7a9335e22cf40473dc?d=identicon&s=25 Steven Soroka (Guest)
on 2008-05-01 18:51
(Received via mailing list)
I was hoping this ticket could be resolved in time for 2.1, it's
complete with tests that show the failure.

http://dev.rubyonrails.org/ticket/11565
A7bf258bf1119b6f386728079391bef0?d=identicon&s=25 danlunde (Guest)
on 2008-05-01 19:01
(Received via mailing list)
But your ticket has nothing to do with the one I was proposing, so
let's not lump them together.
B3bdacd9384d4e7a9335e22cf40473dc?d=identicon&s=25 Steven Soroka (Guest)
on 2008-05-01 19:19
(Received via mailing list)
Sorry about that.  Wasn't my intent.
Efa76b164a7de4a5730e4fa397cc4425?d=identicon&s=25 Michael Koziarski (Guest)
on 2008-05-01 22:10
(Received via mailing list)
On Fri, May 2, 2008 at 4:42 AM, danlunde <danlunde@gmail.com> wrote:
>    has_many :memberships
>   puts "#{group.name}, #{membership.status}"
>  end
>
>  # a better way
>  user.groups.each_with_join do |group, membership|
>   puts "#{group.name}, #{membership.status}"
>  end

This should really just be:

user.memberships.each do |membership|
  puts membership.status, membership.group.name
end

So I can't the need for this feature.

>
>  I created a ticket with a patch (tested) in lighthouse:
> 
http://rails.lighthouseapp.com/projects/8994/ticke...
>
>  Let me know what you think!
>
>  Daniel
>  >
>



--
Cheers

Koz
This topic is locked and can not be replied to.