Pulling data from a one-to-many association

5 views
Skip to first unread message

Mohamad El-Husseini

unread,
Jan 10, 2012, 5:23:36 PM1/10/12
to rubyonra...@googlegroups.com
Another newbie question. My dummy app has the following models:

class User < ActiveRecord::Base
  has_one :list
end

class List < ActiveRecord::Base
  belongs_to :user
  has_many :celebs
end

class Celeb < ActiveRecord::Base
  belongs_to :list
end

I want to load a user's list, and include the celebs that belong to it. I tried the following:

@user = current_user

... @list = user.list.joins(:celebs)
... @list = user.list(:include => :celebs)
... @list = user.list.includes(:celebs)

The result was some errors/unexpect output. The expected query is:

SELECT * FROM lists INNER JOIN lists.id ON celebs.list_id WHERE lists.user_id = @user_id

Peter Vandenabeele

unread,
Jan 11, 2012, 5:50:41 AM1/11/12
to rubyonra...@googlegroups.com
On Tue, Jan 10, 2012 at 11:23 PM, Mohamad El-Husseini <hussei...@gmail.com> wrote:
Another newbie question. My dummy app has the following models:

class User < ActiveRecord::Base
  has_one :list

Try to add here:

      has_one :list_with_celebs, :class_name => "List", :include => :celebs


end

class List < ActiveRecord::Base
  belongs_to :user
  has_many :celebs
end

class Celeb < ActiveRecord::Base
  belongs_to :list
end

I want to load a user's list, and include the celebs that belong to it. I tried the following:

@user = current_user

... @list = user.list.joins(:celebs)
... @list = user.list(:include => :celebs)
... @list = user.list.includes(:celebs)

@user.list_with_celebs

HTH,

Peter

--
Peter Vandenabeele
http://twitter.com/peter_v

thiagocifani

unread,
Jan 11, 2012, 7:30:49 AM1/11/12
to rubyonra...@googlegroups.com
You can try This way

@user.includes(celebs)

Sent from my iPad
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Colin Law

unread,
Jan 11, 2012, 10:10:08 AM1/11/12
to rubyonra...@googlegroups.com
On 10 January 2012 22:23, Mohamad El-Husseini <hussei...@gmail.com> wrote:
> Another newbie question. My dummy app has the following models:
>
> class User < ActiveRecord::Base
>   has_one :list
> end
>
> class List < ActiveRecord::Base
>   belongs_to :user
>   has_many :celebs
> end
>
> class Celeb < ActiveRecord::Base
>   belongs_to :list
> end
>
> I want to load a user's list, and include the celebs that belong to it. I
> tried the following:
>
> @user = current_user
>
> ... @list = user.list.joins(:celebs)
> ... @list = user.list(:include => :celebs)
> ... @list = user.list.includes(:celebs)

You don't normally need to use joins or includes for such things. you
can just say
@list = @user.list
then
celebs = @list.celebs
or just
celebs = @user.list.celebs.
You may have to test for the case where @user.list is nil if it is
possible to have a user that has no list

Colin

Reply all
Reply to author
Forward
0 new messages