奇怪的事情——我有这样的身份验证模块lib/
:
module Authentication
protected
def current_user
User.find(1)
end
end
在 ApplicationController 我包括这个模块和所有帮助程序,但是方法 current_user 在控制器中可用,但不能从视图中使用:(我怎样才能使它工作?
奇怪的事情——我有这样的身份验证模块lib/
:
module Authentication
protected
def current_user
User.find(1)
end
end
在 ApplicationController 我包括这个模块和所有帮助程序,但是方法 current_user 在控制器中可用,但不能从视图中使用:(我怎样才能使它工作?
如果方法是直接在控制器中定义的,则必须通过调用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 结构的简写。)
你有没有声明它
helper :foo # => requires 'foo_helper' and includes FooHelper
helper 'resources/foo' # => requires 'resources/foo_helper' and includes Resources::FooHelper
在您的应用程序控制器中?
http://railsapi.com/doc/rails-v2.3.3.1/classes/ActionController/Helpers/ClassMethods.html#M001904