2017-03-08 41 views
0

是否可以通過included塊在Rails Helper中創建一個包含控制器的動作?我想是這樣的:在幫助器中創建一個「includable」的Rails控制器動作

module XablauHelper 
    included do 
    def my_shared_action 
     true 
    end 
    end 
end 

已經試圖通過class.eval塊,並通過使用像一個類的方法即self.my_shared_action,但沒有成功,這樣做,我已經發現,正在父控制器所需的解決方案共享行爲並從中繼承,但爲了模塊化設計,我希望使其成爲更「全球化」的方法,因此我可以凝鍊我的解決方案並重新使用代碼,任何不使用繼承的建議?

+1

你應該使用一個關注http://api.rubyonrails.org/classes/ActiveSupport/Concern.html – mdesantis

回答

1

幫手添加控制器的行動很可能是錯誤的選擇,因爲這些方法適用於您的意見

請考慮使用控制器問題,並在需要時包括它們。例如:

# in app/controllers/concerns/useful_functions_concern.rb 
module UsefulFunctionsConcern 
    extend ActiveSupport::Concern 

    included do 
    rescue_from SomeException, with: :handle_access_denied 
    end 

    def useful_method 
    # ... 
    end 

    protected 
    def handle_access_denied 
    # ... 
    end 
end 

# in your controller 
class XyzController < ApplicationController 
    include UsefulFunctionsConcern 

    def index 
    useful_method 
    end 
end 

其中共同的控制器動作可以共享並且控制器具有共同的例如他們都是API控制器,也考慮使用繼承來實現這一點。例如:

# parent controller 
class ApiController < ApplicationController 
    def my_shared_action 
    end 
end 

class SpecificApiController < ApiController 
end 
+0

清潔容易,謝謝!我會在接下來的幾天嘗試解決方案,如果成功,則標記爲正確答案。 – ErvalhouS

相關問題