为收集创建自定义方法
问题描述:
我试图创建几个方法来操纵对象的集合。为收集创建自定义方法
我有下面的语句在我的控制器
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方法,因此该方法应该被编码以便与任何类型一起使用。
太棒了!精美的作品。 – Lievcin 2011-01-30 20:25:50