Method on a array of objects from the database

Hello,

I would like to know the more elegant way to add a method for an array of objects from the database.

Let me give an example :

Class Product .... end

And in my controller :

@products = Product.find(:all)

And now I want to define a method which I could like

@products.select_fruits

having said somewhere :

def select_fruits .... end

Thank you very much,

Pierre

Is you question about where those methods should go? They can, and usually should, go in the model.

class Product

def self.find_all    find(:all, .....) end

def self.select_fruits(parameters)     find(:all, :conditions... end

end

--- controller --

fruits = Product.select_fruits(:fruit_type = params[:....])

Thank you for your answer but my question is how to add method to an array of @products.

I have : @products.find(:all)

Then, if I want to select only fruits from @products, I could do : @products.select {...} And it's this select that I want to put in a method select_fruits so that I could do :

@products.select_fruits which corresponds to @products.select { ... }

Thank you, Pierre

One way is to make your own finder directly on the model

class Product < ActiveRecord::Base

def self.find_all_fruits

self.find :all, :condition => ["category = “fruit”]

end

end

Although you don’t have to bother if you can tell by looking at a field. For example, if you have a “category” column that shows “fruit”, you can just use a dynamic finder for that

@fruit = Product.find_all_by_category(“fruit”)

@fruit_in_stock = Product.find_all_by_category_and_available(“fruit”,true)

You should be letting your database do the work of filtering records, as that’s its job. You don’t want to iterate and reject / filter records in Ruby. It’s much slower. It looks cool but it’s not worth it.

Thanks you ! It's great ! Pierre