Rails:范围:使所有视图和控制器都可以使用方法

时间:2012-07-02 13:43:53

标签: ruby-on-rails scope

我在范围内挣扎了好几天。我希望所有视图和控制器都可以使用少量方法。 假设代码是:

def login_role
  if current_user
    return current_user.role
  end
  return nil
end

如果我将它包含在application_helper.rb中,那么它仅适用于所有视图,但不适用于所有控制器

如果我将它包含在application_controller.rb中,那么它可供所有控制器使用,但并非所有视图都可用。

2 个答案:

答案 0 :(得分:25)

使用ApplicationController中的helper_method方法为视图提供访问权限。

class ApplicationController < ActionController::Base

  helper_method :login_role

  def login_role
    current_user ? current_user.role : nil
  end

end

考虑将所有相关方法放在他们自己的模块中,然后你可以使它们全部可用:

helper LoginMethods

答案 1 :(得分:-4)

创建自己的库(可以有类,模块,方法),并将其放在lib目录中。我们称之为my_lib.rb。

在您的application_controller.rb和application_helper.rb中添加以下行:

require 'my_lib'

这将使所有视图和控制器都可以使用所有类,模块和方法