2015-01-01 118 views
0

是否可以通过关注添加控制器动作?包括轨道控制器的动作

我想包括通过关注一个控制器动作,但它是没有得到发现:

module Wizbang 
    module ActsAsWizbang 
    extend ActiveSupport::Concern 

    included do 

     def foo 
     # do something 
     end 
    end 
end 

我已经添加了approprioate路线我的路线文件,但它无法找到在行动控制器。

当我包括在我的控制器这段代码

class SimpleController < ApplicationController 

    include Wizbang::ActsAsWizbang 

end 

我收到消息:

The action 'foo' could not be found for SimpleController.

回答

2

如果你要定义的方法混入类,只需在定义它们模块。他们不进去included块:

module Wizbang 
    module ActsAsWizbang 
    extend ActiveSupport::Concern 

    def foo 
     # do something 
    end 
    end 
end 
+0

我试过这个,我仍然得到相同的错误。 – Doug

+0

如果它应该是一个类方法(这是错误的建议),那么你不需要将'def foo'块封装在一个'ClassMethods'模块中吗? –

+1

@SteveRowley错误信息确实没有提示**。控制器操作必须是实例方法,而不是类方法。该错误消息指出'SimpleController'上没有定义实例方法'foo'。 – meagar