Как условно назначить переменные ruby ​​переменным javascript? - PullRequest
0 голосов
/ 13 июня 2010

У меня есть веб-сайт, на котором мне нужна javascript-версия объекта «текущий пользователь» вместе с ruby-версией.Я назначал эти переменные, делая что-то вроде этого ...

Application Controller:
def get_user
    begin
      @current_user = User.find(session[:user_id]) if session[:user_id]
      @current_user_json = @current_user.to_json
    rescue
      session.delete(:user_id)
      @current_user = nil
      @current_user_json = {}
    end
  end

Web Page:
var current_user = null;
current_user_json = '<%= @current_user_json %>';
if(current_user_json != ''){
        current_user = current_user_json.user;
}

Даже когда есть текущий пользователь, я получаю, что текущий пользователь не определен.Возможно, потому что я ставлю назначение current_user_json вокруг одинарных кавычек.Однако, если я не заключу это в одинарные кавычки, я всегда получу ошибку JavaScript, когда ни один пользователь не вошел в систему, потому что синтаксис неверен -

current_user_json = ;

Я думаю, что я просто смотрюсовершенно неправильно и должен быть лучший способ.Учитывая, что это, вероятно, обычное дело, я хотел узнать мнение других людей о том, как создать объект в javascript, который является дубликатом объекта ruby.

Ответы [ 2 ]

4 голосов
/ 13 июня 2010

JSON является допустимым Javascript. Попробуйте удалить кавычки и просто вывести их напрямую:

current_user_json = <%= @current_user.nil? ? '' : @current_user_json %>;

Еще лучше, пусть ваш контроллер сделает всю работу вместо того, чтобы поместить логику в представление:

@current_user_json = @current_user.nil? ? '{user: null}' : @current_user.to_json 
# ...
current_user_json = <%= @current_user_json %>;

(РЕДАКТИРОВАТЬ: предложение Объединенного Пойнти ниже.)

0 голосов
/ 13 июня 2010

Вы не указали, откуда вы получите to_json.Если вы используете гем "json", nil.to_json дает "null", что приведет к current_user_json = null в вашем JS - что действительно.Если это какая-то другая библиотека, которая этого не делает, возможно, проще всего было бы переопределить to_json, чтобы она выдала правильный ответ:

class NilClass
  def to_json
    "null"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...