Ruby on Rails:控制器和视图可用的常见方法是什么?

11

我已经短时间使用Ruby on Rails. 最近我为我的应用程序实现了一个身份验证系统。我在'application_helper.rb'中提供了一个可用的方法来检索当前登录的用户(方法称为current_user)。

如果session[:user_id]变量存在,该方法将只检索我的User对象。

但是我面临以下问题。

  1. 如果我把current_user方法放在'application_helper.rb'中,我的控制器无法使用它
  2. 如果我把current_user方法放在'application_controller.rb'中,我的视图无法使用它

解决这个问题的最佳方法是什么?简单的方法是在控制器和帮助程序中复制我的代码,但我知道有更好、更正确的方法。

提前感谢。

1个回答

11

这是一个常见且已经解决的问题。

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

我知道它只是那么简单。我以为helper_method和将方法放在helper类中是一样的,但实际上并不是。感谢您快速的回答和语法编辑。 :) - lupidan
@meagar:我有同样的问题,但添加辅助方法并没有解决它。我已经在class_controller中定义了我的方法和辅助方法,而不是在Application controller中。http://stackoverflow.com/questions/24993912/share-method-in-view-and-controller-ruby-on-rails-4 - user1876128

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接