创建集合的自定义方法

时间:2011-01-30 19:54:34

标签: ruby-on-rails ruby-on-rails-3

我正在尝试创建几种操作对象集合的方法。

我的控制器中有以下声明

  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将这个“自定义”方法库添加到默认的Array库中?

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

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:4)

您可以扩展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方法,因此该方法应该被编码为适合任何类型。