ActiveRecord - how to search by association value?

class Child < Entity
belongs_to :parent, :foreign_key => ‘parent_id’

class Parent < Entity

class Entity < ActiveRecord::Base

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.

class Parent < Entity
has_many :children

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


On Sat, Oct 16, 2010 at 4:01 AM, Nikolai Teleguine
[email protected]wrote:

Rails version is 2.1.0, if that matters.

Erol M. Fornoles


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”, => “Michael”)


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


You can use dynamic finders:

Child.find_by_parent_id_and_name(, “Timmy”)

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


Which IMO is more readable than the first example.

On Mon, Oct 18, 2010 at 10:35 PM, Nikolai Teleguine
[email protected]wrote:

But the goal is to find the child, using only its ‘parent’ association.

[email protected][email protected]

For more options, visit this group at

Erol M. Fornoles