为收集创建自定义方法

问题描述:

我试图创建几个方法来操纵对象的集合。为收集创建自定义方法

我有下面的语句在我的控制器

def show 
    @big = Configuration.find(params[:id]).elements 
    @custombig = @big.getchanged 
    end 

在配置模型中,我有:

require 'lib/validation_rules' 
class Configuration < ActiveRecord::Base 
    include ValidationRules 

,并在我的lib文件夹我有一个文件名为validation_rules:

module ValidationRules 
    def getchanged() 
    names =[] 
    self.each do |pp| 
     names << pp.name 
     return names 
    end 
    end 
end 

这个想法很简单。同样的模型将需要很多配置规则,我想保留在控制器和模型之外(当我说了很多,我的意思是大约200)。

上述代码的问题是,当我调用它时,它告诉我该方法不存在,并且似乎发生了这种情况,因为@big是配置数组,而不仅仅是一个配置对象。 当我在单个Configuration对象上尝试相同的方法时,它可以正常工作,但在此版本中,它没有。

我怎样才能得到轨道将这个“自定义”方法库添加到默认数组阿森纳?

为了记录,上面的方法只是一个测试,并不完全是我需要做的,代码做的不是问题,但Rails在抛出错误之前甚至不会看到那里。

非常感谢您的帮助!

您可以扩展Enumerable模块,该模块包含在诸如Array之类的集合类中,并定义了诸如'any?'之类的方法。和'收集'。例如:

module Enumerable 
    def do_something 
    self.each do |item| 
     yield(item) 
    end 
    end 
end 

letters = ['a', 'b', 'c'] 
letters.do_something { |letter| p letter } 

我的do_something方法什么也不做,真的 - 调用它就像调用'each'一样。但是,当然你可以添加你的逻辑来达到预期的效果。

请记住,包括'Enumerable'在内的任何东西现在都会有do_something方法,因此该方法应该被编码以便与任何类型一起使用。

+0

太棒了!精美的作品。 – Lievcin 2011-01-30 20:25:50