Javascript 从Rails 3中的application.js访问当前_用户变量

Javascript 从Rails 3中的application.js访问当前_用户变量,javascript,ruby-on-rails,ruby,ruby-on-rails-3,devise,Javascript,Ruby On Rails,Ruby,Ruby On Rails 3,Devise,我希望从我的application.js访问我当前的用户变量(我将application.js重命名为application.js.erb,以便服务器能够理解我的ruby代码),因此我得到了如下结果: function hello(){ alert("<%= current_user.name %>"); } 函数hello(){alert(“”;} 但它失败了: 如何从Desive gem从/assets/my_script.js.erb中的脚本中获取会话变量(如当前用户),

我希望从我的application.js访问我当前的用户变量(我将application.js重命名为application.js.erb,以便服务器能够理解我的ruby代码),因此我得到了如下结果:

function hello(){ alert("<%= current_user.name %>"); }
函数hello(){alert(“”;}
但它失败了:

如何从Desive gem从/assets/my_script.js.erb中的脚本中获取会话变量(如当前用户),我认为它不应该启用,因为这些变量可能无法从公共站点访问,或者应该如何处理

谢谢

  • 请看一下rails中的铸件
  • 尝试使用

  • Application.js不会在任何会话变量或方法的上下文中进行评估。从javascript访问用户名的最简单方法是在应用程序控制器上的before_操作中设置cookie:

    class ApplicationController < ActionController::Base
      before_action :set_user
    
      private
    
      def set_user
        cookies[:username] = current_user.name || 'guest'
      end
    end
    
    一个更详细但更干净的方法是创建一个访问当前用户并返回用户名的路由,例如

    routes.rb

    get 'current_user' => "users#current_user"
    
    用户\u controller.rb

    def current_user
        render json: {name: current_user.name}
    end
    
    application.js

    $.get('/current_user', function(result){
      alert(result.name);
    });
    

    将当前用户作为JSON从应用程序控制器传递到视图,以便javascript可以使用它

    应用程序控制器:

    class ApplicationController < ActionController::Base
      before_action :set_user
    
      private
    
      def set_user
        cookies[:username] = current_user.name || 'guest'
      end
    end
    

    我明白了,我可以让我的js.erb理解ruby代码,例如alert(“”);工作正常,但我无法让它与当前用户变量一起工作在js文件中使用ruby最简单的方法是对js文件使用
    js.erb
    扩展名。@RAJ同意,但现在的问题是访问当前用户变量David,你能看看这个问题吗?这是一个类似的问题,但我不确定处理这个问题的最佳方法是什么。我想你可以马上告诉我完美的解决方案。谢谢这在dev中非常有效,但一旦我投入生产,它甚至无法识别脚本。有什么想法吗?@gwalshington是application.js中的脚本还是自定义脚本?如果你把它放在其他地方,你需要检查你是否正确地预编译了你的资产——关于这一点有很多问题topic@DavidJohnSmith它在应用程序中。js@DavidJohnSmith感谢您的回复,我真的很喜欢您的方法,我不需要在js中呈现ruby变量,但我可以通过js或通过cookie会话变量获取它们,太棒了!这样做的副作用是将用户的所有信息公开给用户,而您可能不想这样做。
    def method_name
      respond_to do |format|
         format.json{ render :json => @user.to_json }
      end
    end