2011-01-30 110 views
4

我試圖創建幾個方法來操縱對象的集合。爲收集創建自定義方法

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

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在拋出錯誤之前甚至不會看到那裏。

非常感謝您的幫助!

回答

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方法,因此該方法應該被編碼以便與任何類型一起使用。

+0

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