2015-04-20 2 views
3

Я хочу получить доступ к моей переменной current_user из моего приложения.js (я переименовал приложение application.js в application.js.erb, чтобы сервер мог понять мой код ruby), поэтому я есть что-то вроде:Доступ к переменной current_user из приложения.js в Rails 3

function hello(){ alert("<%= current_user.name %>"); } 

Но он не:

enter image description here

Как я могу получить переменные сессии, как CURRENT_USER из DEViSE жемчужину рабочего из скрипта, расположенного в /assets/my_script.js.erb , я думаю, что это не должно быть устранено, потому что переменные eese не могут быть подвержены сбоям на публичных сайтах или что делать с этим?

Спасибо!

+0

Простейший способ использовать рубин в JS-файлов является использование 'js.erb' расширение для файла JS. – RAJ

+0

@RAJ согласился, но проблема в этот момент обращается к переменной current_user –

ответ

15

application.js не оценивается в контексте каких-либо переменных сеанса или методов. Самый простой способ получить доступ к имени пользователя из JavaScript будет установить кук в before_action на контроллере приложения:

class ApplicationController < ActionController::Base 
    before_action :set_user 

    private 

    def set_user 
    cookies[:username] = current_user.name || 'guest' 
    end 
end 

Тогда из любых JS в приложении/активы, которые вы можете получить доступ к кукам:

alert(document.cookie); 

A более подробный, но, возможно, более чистый метод заключается в создании маршрута, который обращается к текущему пользователю и возвращает имя пользователя, например

routes.rb

get 'current_user' => "users#current_user" 

users_controller.rb

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

application.js

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

Дэвид, не могли бы вы взглянуть на эту проблему: http://stackoverflow.com/questions/34323316/fullcalendar-passing-js-vars-to-rails-and- наоборот? Это аналогичная проблема, но я не уверен, что лучший способ справиться с этим. Я думаю, вы могли бы сказать мне идеальное решение в кратчайшие сроки. Благодаря! –

+0

Это отлично работает в dev, но как только я подтолкнул его к выпуску, он даже не распознал сценарий. Любые мысли по этому поводу? – gwalshington

+0

@gwalshington - ваш скрипт в application.js или пользовательский скрипт?Если вы положили его в другое место, вам нужно будет проверить, что вы правильно скомпилируете свои активы. В этом разделе есть много вопросов по этому вопросу. –

2
  1. Посмотрите на this episode в рельсах бросает
  2. Попробуйте использовать gon gem
+1

Я вижу, я могу заставить js.erb понимать код ruby, например alert («<%= 'hi' %>»); работает, но я не могу заставить его работать с переменной current_user –

1

Pass текущего пользователя, чтобы просмотреть, как JSON из контроллера приложения, так что он доступен JavaScript.

контроллер приложения:

def method_name 
    respond_to do |format| 
    format.json{ render :json => @user.to_json } 
    end 
end 
+1

Это будет иметь побочный эффект, чтобы подвергать пользователя всю информацию пользователя, которую вы, возможно, не захотите делать. –

Смежные вопросы