ActiveRecord - how to search by association value?


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.

class Parent < Entity
has_many :children
end

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

HTH

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
http://erolfornoles.posterous.com

http://twitter.com/erolfornoles
http://ph.linkedin.com/in/erolfornoles

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,

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

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
[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
http://groups.google.com/group/rubyonrails-talk?hl=en.


Erol M. Fornoles
http://erolfornoles.posterous.com

http://twitter.com/erolfornoles
http://ph.linkedin.com/in/erolfornoles