2013-04-14 78 views
0

在一個控制器有一個代碼導軌 - 產生行動動態

def action1 
    generic_call __method__ 
    end 

    def action2 
    generic_call __method__ 
    end 

    #...... 
    def action_n 
    generic_call __method__ 
    end 

private 

def generic_call method_name 
    #.......... 
end 

要擺脫掉重複的,這將是更好的動態生成的行動?與靜態定義相比,它會更昂貴嗎?我怎樣才能做到這一點?

+0

不知道什麼行爲實際*是*,這是不可能的,如果這是一個好主意或不。如果你從字面上命名爲'action1'' action2'直到'actionn',那麼我會建議其他東西已經出錯了,我想知道你爲什麼不只是使用一個參數。我也想知道爲什麼你避開了語義有意義的操作,但這是一個不同的問題。 –

+0

沒有錯,他們是ajax動作。那麼,也許有什麼不對。 –

+0

他們是Ajax操作並不相關,AFAICT。 –

回答

2

主要成本實際上是不得不自己重複所有的代碼,請記住,軌道上的哲學是乾的(不要重複自己)。

如果通過使用元編程定義方法會導致開銷,那麼您根本不會注意到它,但是您可以自己運行一些基準測試,但即使rails源代碼充滿了元編程和動態方法遍佈全球,特別與ActiveRecord

class MyController < ActionController::Base 
    [:action1, :action2, :action3].each do |method_name| 
    send :define_method, method_name do 
     generic_call __method__ 
    end 
    end 
end