我一直在使用Ruby on Rails很短的时间。最近我为我的应用程序实现了一个认证系统。我在' application_helper.rb'上提供了一个方法。检索当前记录的用户(名为current_user的方法)。
如果User
变量存在,该方法只会检索我的session[:user_id]
对象。
但是我面临以下问题。
current_user
方法放入' application_helper.rb ',我的控制器无法使用它current_user
方法放在' application_controller.rb '中,我的观看次数就无法使用它解决此问题的最佳方法是什么?简单的方法是在控制器和帮助器中复制我的代码,但我知道有更好更正确的方法。
提前致谢
答案 0 :(得分:7)
这是一个常见且解决得很好的问题。
Rails不允许控制器访问辅助方法。如果要在视图和控制器之间共享方法,则需要在控制器中定义方法,然后使用helper_method
使其可用于您的视图:
class ApplicationController < ActionController::Bbase
# Let views access current_user
helper_method :current_user
def current_user
# ...
end
end
您可以将多个方法名称传递给helper_method
,以使您的控制器中的其他方法可用于您的视图:
helper_method :current_user, :logged_in?
def current_user
# ...
end
def logged_in?
!current_user.nil?
end