ActiveRecord - how to search by association value?

336 views
Skip to first unread message

Nikolai Teleguine

unread,
Oct 15, 2010, 4:01:06 PM10/15/10
to rubyonra...@googlegroups.com
---
class Child < Entity
belongs_to :parent, :foreign_key => 'parent_id'
end

class Parent < Entity
end

class Entity < ActiveRecord::Base
end
---

p = Parent.find_by_name( "Michael" )

How do I find children of this parent, given that I have the identity
of the parent?
Can I do it without referring to parent entity attributes/values
directly ? Something like

Child.find :parent => p

Rails version is 2.1.0, if that matters.

Erol Fornoles

unread,
Oct 16, 2010, 5:50:07 AM10/16/10
to rubyonra...@googlegroups.com
class Parent < Entity
  has_many :children
end

p = Parent.find_by_name("Michael")
p.children # Returns all children of the parent

HTH


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




--
Erol M. Fornoles

Nikolai Teleguine

unread,
Oct 18, 2010, 10:35:38 AM10/18/10
to rubyonra...@googlegroups.com
Erol,

Thank you for the reply.

This will work, but is there a way to do this search without adding
another association?
I am just trying to learn the capabilities of ActiveRecord.

Let me re-state the problem: I either already have the parent object,
or know enough of it's attributes to find the parent.
But the goal is to find the child, using only its 'parent' association.

Child.find (:name=>"Timmy", parent => knownParent )
- or -
Child.find (:name=>"Timmy", parent.name => "Michael")

Erol Fornoles

unread,
Oct 18, 2010, 11:40:47 AM10/18/10
to rubyonra...@googlegroups.com
You can use dynamic finders:

Child.find_by_parent_id_and_name(parent.id, "Timmy")

But then again, if you already have the parent object, the common practice is to setup the children association and get the child using it:

parent.children.find_by_name("Timmy")

Which IMO is more readable than the first example.

On Mon, Oct 18, 2010 at 10:35 PM, Nikolai Teleguine <ntele...@gmail.com> wrote:
Erol,

Thank you for the reply.

This will work, but is there a way to do this search without adding
another association?
I am just trying to learn the capabilities of ActiveRecord.

Let me re-state the problem: I either already have the parent object,
or know enough of it's attributes to find the parent.
But the goal is to find the child, using only its 'parent' association.

Child.find (:name=>"Timmy", parent => knownParent )
- or -
Child.find (:name=>"Timmy", parent.name => "Michael")
--
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.

Nikolai Teleguine

unread,
Oct 18, 2010, 6:40:25 PM10/18/10
to rubyonra...@googlegroups.com
Erol,

Thanks, it did not occur to me to try this kind of finder. The second
option also works, especially "common practice" part - learning Rails
idioms here.

I initially assumed ActiveRecord would be able to build a query based
on known PK and FK attributes of the association without explicit
reference of parent's id, which would be, in my opinion, more OO

Nikolai

Reply all
Reply to author
Forward
0 new messages