ruby-on-rails - Ruby on rails 全局变量?

标签 ruby-on-rails ruby ruby-on-rails-3

我正在尝试将当前用户设置为一个变量以在每个页面上显示“以 Joe 身份登录”。不太确定从哪里开始...

有什么快速提示吗?具体来说,像这样的东西应该放在什么文件中......

我当前的用户可以定义为(我认为):User.find_by_id(session[:user_id])

TY :)

最佳答案

您可能希望使用 Authlogic 或 Devise 之类的东西来处理这个问题,而不是滚动您自己的身份验证系统,尤其是当您不太熟悉 Rails 应用程序中常见的设计模式时。

就是说,如果您想按照问题中的要求进行操作,您应该像这样在 ApplicationController 中定义一个方法:

def current_user
  @current_user ||= User.limit(1).where('id = ?', session[:user_id])
end

您从所有常规 Controller 上的 ApplicationController 继承,因此它们都可以访问 current_user 方法。此外,您可能希望在您的 View 中作为助手访问该方法。 Rails 也会为您解决这个问题(也在您的 ApplicationController 中):

helper_method :current_user
def current_user ...

注意:如果您使用 find_by_x 方法,如果没有返回任何内容,它们将引发 ActiveRecord::RecordNotFound 错误。您可能不希望那样,但您可能想要一些东西来防止非用户访问仅限用户的资源,而且,Rails 已经涵盖了您:

class ApplicationController < ActionController::Base
  protect_from_forgery
  helper_method :current_user
  before_filter :require_user

private
  def current_user
    @current_user ||= User.limit(1).where('id = ?', session[:user_id])
  end

  def require_user
    unless current_user
      flash[:notice] = "You must be logged in to access this page"
      redirect_to new_session_url
      return false
    end
  end
end

干杯!

关于ruby-on-rails - Ruby on rails 全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5761512/

相关文章:

ruby-on-rails - 如何检查 Globalize 是否使用了回退

ruby - 将 Ruby 程序作为 Windows 服务运行?

ruby-on-rails - 虚拟 ruby - 没有这样的文件或目录 - main.rb (LoadError)

ruby-on-rails-3 - 带有 mongoid 的 Rails 3 中的嵌套属性问题(不保存嵌套对象)

ruby-on-rails-3 - 设计:如何访问我所有 Controller 中的辅助方法

ruby-on-rails - 使用 rvmrc 或 ruby​​-version 文件通过 RVM 设置项目 gemset?

ruby-on-rails - 谁是私有(private) Rails 方法的调用者?

ruby-on-rails - Rails 的多个数据库不适用于远程数据库

mysql - 我如何在 ruby​​ 中解析这个查询 url

ruby-on-rails - distance_of_time_in_words,然后删除单词 "about"