Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Easy Rails问题:全局用户变量?_Ruby On Rails_Model View Controller_Global Variables - Fatal编程技术网

Ruby on rails Easy Rails问题:全局用户变量?

Ruby on rails Easy Rails问题:全局用户变量?,ruby-on-rails,model-view-controller,global-variables,Ruby On Rails,Model View Controller,Global Variables,我有一堆不同的控制器,我希望能够执行标准的“欢迎,用户”。我如何分配用户变量以使从任何控制器访问成为可能 以下是迄今为止我在应用程序控制器中的内容: class ApplicationController < ActionController::Base before_filter :authorize protect_from_forgery private def current_user User.find(sessi

我有一堆不同的控制器,我希望能够执行标准的“欢迎,用户”。我如何分配用户变量以使从任何控制器访问成为可能

以下是迄今为止我在应用程序控制器中的内容:

class ApplicationController < ActionController::Base
    before_filter :authorize

  protect_from_forgery

    private

        def current_user
            User.find(session[:user_id])
        end

  protected

    def authorize
        unless User.find_by_id(session[:user_id])
            redirect_to login_url, :notice => "Please Login"
        end
    end
end
最好的方法是什么


谢谢

如果您希望能够将用户名嵌入欢迎消息中,我可能只会将其存储在会话中(作为优化,以避免每次都获取该用户名),然后创建一个显示该用户名的分部

Hello, <%= session[:username] %>
你好,
并在布局中或任何您想显示此消息的位置包含该部分


如果您要查找的不仅仅是用户名或类似的少量数据,则最好还是显示部分,但在加载数据之前从数据库中获取信息(正如Yoshiji先生所建议的那样),这可能是一个好主意。

当前用户
是一个私有方法,是否公开,您的代码可能会正常工作。

通常,视图不能调用控制器方法。但是,如果您愿意,您可以将其用于特定的方法,例如

class ApplicationController < ActionController::Base
  ...
  def current_user
    ...
  end
  helper_method :user
end
class ApplicationController
用户是否每次都从数据库中获取,或者是否在会话中存储了一些数据并不重要,但是您的视图不应该与该细节相耦合


我也会有点担心,在没有首先了解用户名对性能的影响有多大的情况下,将用户名作为优化保存在会话中

,但它是在应用程序控制器中,甚至不应该是私人工作吗?若并没有,那个么它对什么是私有的?私有方法只属于ApplicationController,但您可以从视图运行该方法。嘿,谢谢!我想这就是我需要的。对于那些有相同问题的人,我刚刚在我的sessions\u controller“create”方法中添加了一个新声明,
session[:firstname]=user.first\u name
。谢谢你,伙计!是什么让你担心?似乎任何会话数据都比在每次页面加载时查询数据库更有效。而且,--只需搜索helper_方法,它就可以解决确切的问题。让我担心的是过早的优化。
class ApplicationController < ActionController::Base
  ...
  def current_user
    ...
  end
  helper_method :user
end