我正在尝试创建几种操作对象集合的方法。
我的控制器中有以下声明
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在抛出错误之前甚至看不到它。
非常感谢你的帮助!
答案 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方法,因此该方法应该被编码为适合任何类型。