I’m trying to create several methods to manipulate collections of objects.
I have the following statement in my controller
def show
@big = Configuration.find(params[:id]).elements
@custombig = @big.getchanged
end
In the Configuration model I have:
require 'lib/validation_rules'
class Configuration < ActiveRecord::Base
include ValidationRules
and in my lib folder I have a file called validation_rules:
module ValidationRules
def getchanged()
names =[]
self.each do |pp|
names << pp.name
return names
end
end
end
The idea is simple. The same model will need a lot of configuration rules, which I want to keep out of the controller and the model (when I say a lot, i mean about 200).
The problem with the code above is that when I call upon it, it tells me the method doesn’t exist, and it seems this is happening because @big is an array of configurations, not just one configuration object.
When I tried the same approach on a single Configuration object, it works fine, but in this version, it doesn’t.
How can I get rails to add this “custom” library of methods into the default Array arsenal?
For the record, the method above is just a test and not exactly what i need to do, what the code does is not the problem, but that Rails doesn’t even look there before throwing the error.
Thanks a lot for your help!
You can extend the Enumerable module, which is included into collection classes such as Array, and which defines methods such as ‘any?’ and ‘collect’. For example:
My do_something method does nothing, really — calling it is like calling ‘each’. But of course you can add your logic into it to achieve the desired result.
Keep in mind that anything including ‘Enumerable’ will now have the do_something method, so that method should be coded to play nicely with any type.