как получить доступ к значению базы данных с помощью jQuery в приложении rails - PullRequest
0 голосов
/ 17 марта 2011

У меня есть одно приложение рельсов, используя omniauth.А также сохранить токен в моей базе данных.После завершения процесса аутентификации я хочу получить данные из поставщика omniauth с помощью jQuery. Как я могу использовать, например, @ current_user.token в моем скрипте jQuery?

Ответы [ 3 ]

1 голос
/ 17 марта 2011

С Rails 3 я рекомендую использовать файлы шаблонов js.erb, чтобы легко использовать переменные в вашем jQuery. Вы настраиваете свой контроллер для ответа на js-запросы, затем делаете запрос на этот URL-адрес, и отрендеренный js.erb будет выполняться в браузере как javascript, и он может использовать переменные, установленные действием вашего контроллера.

Ваш контроллер будет выглядеть примерно так:

class Users < ApplicationController
  respond_to :js, :only => :me
  def me
    @current_user = User.find(session[:user])
    respond_with(@current_user)
  end
end

Тогда напишите что-нибудь подобное в me.js.erb

$('#current_user_token').html("<%= escape_javascript(@current_user.token) %>");

Вы можете вызвать ваше действие напрямую, добавив .js к вашему URL.

http://0.0.0.0:3000/users/me.js

Из шаблона просто используйте удаленную форму или ссылку, добавив параметр: remote => true

link_to "Show user token", me_users_path, :remote => true

ваш файл me.js.erb работает так же, как и любой другой файл JS, и вы можете иметь столько JS, сколько захотите. используйте теги ERB везде, где вы хотите использовать свои переменные или помощник, но не забудьте обернуть их в помощник escape_javascript "<% = escape_javascript (render @current_user)%>"

Чтобы просто запросить переменные без рендеринга шаблона js.erb, используйте предложение eggie5 и сделайте ajax-запрос к действию, которое отвечает на: json. Он вернет ваш @current_user как объект json.

1 голос
/ 17 марта 2011

Поскольку jquery работает только в контексте браузера, он не может напрямую запрашивать базу данных, которая находится на сервере.

Если вы хотите получить доступ к некоторому значению из вашей базы данных на клиенте.Я бы предложил либо выполнить AJAX-вызов какой-либо конечной точки сервера, либо записать значение (возможно, как JSON) на страницу и получить его с помощью селектора jquery, например: $('server_value')......

0 голосов
/ 18 марта 2011
Идея

eggie5 просто захватить JSON через AJAX хороша ... другой вариант - поместить токен в cookie, и тогда он всегда доступен через JavaScript.

Контроллер

class SomeController
  def some_action
    cookies[:user_token] = current_user.token
  end
end

JS

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

var token = readCookie('user_token');
...