奇怪的是 - 我在lib/
中有身份验证模块,如下所示:
module Authentication
protected
def current_user
User.find(1)
end
end
并且在ApplicationController中我包含了这个模块和所有帮助器,但是方法current_user在控制器中可用,但不在视图中:(如何使其工作?
答案 0 :(得分:30)
如果方法是直接在控制器中定义的,则必须通过调用helper_method :method_name
使其可用于视图。
class ApplicationController < ActionController::Base
def current_user
# ...
end
helper_method :current_user
end
使用模块,您也可以这样做,但这有点棘手。
module Authentication
def current_user
# ...
end
def self.included m
return unless m < ActionController::Base
m.helper_method :current_user # , :any_other_helper_methods
end
end
class ApplicationController < ActionController::Base
include Authentication
end
啊,是的,如果您的模块是严格意义上的帮助模块,您可以像Lichtamberg所说的那样做。但话说回来,您可以将其命名为AuthenticationHelper
并将其放在app/helpers
文件夹中。
虽然根据我自己的身份验证代码经验, 希望控制器和视图都可以使用它。因为通常你会在控制器中处理授权。帮助者可以独家观看。 (我相信它们最初是作为复杂html构造的缩写。)
答案 1 :(得分:1)
你用
声明了吗? helper :foo # => requires 'foo_helper' and includes FooHelper
helper 'resources/foo' # => requires 'resources/foo_helper' and includes Resources::FooHelper
在ApplicationController中?
http://railsapi.com/doc/rails-v2.3.3.1/classes/ActionController/Helpers/ClassMethods.html#M001904