Models - 'find'-ing by a method

wondering if there is a way to do this…

say we have a model that has attributes length and width…

:length and :width

and we have a class square:

class Square < ActiveRecord::Base

def area
area = length * width
end

end

is there a way i can do a:

Square.find(:area => ‘144’)

to produce any squares with an area of 144?

i know there are lots of other ways to do this, but in the case i am
working on, a find would be REALLY clean…

On Apr 28, 2:34pm, Sergio R. [email protected] wrote:

def area

i know there are lots of other ways to do this, but in the case i am
working on, a find would be REALLY clean…

Not directly (although clearly you could write Square.where(‘length *
width = 144’), or define a named scope that does this. you also can’t
use indexes for queries like this (unless your db supports functional
indexes)

Fred

On Thu, Apr 28, 2011 at 9:34 PM, Sergio R. [email protected]
wrote:

def area
area = length * width
end

end

is there a way i can do a:

Square.find(:area => ‘144’)

You can always use your db’s arithmetic operators, for mysql you can
look at
http://dev.mysql.com/doc/refman/5.0/en/arithmetic-functions.html

“Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.

thanks, guys!

i ended up just writing a method for the model that does the check…
it’s something that would only happen maybe once a week… and then,
maybe only one or two transactions.