Отправка данных из кода Ruby (rails) в javascript / jquery - PullRequest
0 голосов
/ 19 марта 2012

Я недавно начал работать над проектом, который включает ruby ​​на rails / javascript / jquery. Я очень новичок во всем этом. Часть, в которой я участвую, такова. Пользователь нажимает на кнопку. Откроется диалоговое окно, где пользователь введет термин для поиска. С этим термином я буду создавать URI, посмотрев на xml. Тогда я сделаю вызов REST. Ответом будет файл XML. Я буду анализировать его и отображать данные в том же диалоговом окне, где пользователь ввел термин для поиска.

Я использую JQuery для создания диалога. И я делаю разбор и REST часть вызова в коде ruby ​​(класс Helper). Я не использую модели и контроллер с моей стороны. Теперь мне нужно отправить данные из вспомогательного метода в файл erb, где я буду отображать данные в виде таблицы. Вывод будет такой

строка11 строка12 строка13
строка21 строка22 строка23
строка31 строка32 строка33
, , .
, , .

На данный момент в коде ruby ​​я создал 3 массива для каждого столбца. Я не уверен, как отправить данные из ruby ​​в html / javascript. Если есть лучший способ сделать это, то дайте мне знать. Например: вместо отправки в виде 3-х отдельных массивов лучше отправлять как xml / json? Или любые другие предложения будут действительно полезны. В основном я не понимаю, как отправить эти данные в файл erb. Заранее спасибо.

Редактировать: добавление примера кода

Javascript / Jquery -

При нажатии кнопки я хочу вызвать метод ruby ​​в файле erb Пример: <% = getUserList%> В файле erb также есть другой код javascript / html для отображения других материалов.

И во вспомогательном методе у меня есть метод getUserList

def getUserList(search)
uri = create_url(search)
@doc = Nokogiri::HTML(open(uri))
//Doing parsing and other stuffs here
//creating 3 array as mentioned above which needs to be displayed
end

Я хочу, чтобы вышеуказанные массивы отображались. Я не уверен, как отправить эти массивы в файл erb, который вызвал этот метод

1 Ответ

0 голосов
/ 19 марта 2012

В вашем контроллере:

def users
  respond_to do |format|
    format.js do
      render(:js => "callback(#{@users.to_json});")
    end
  end
end

Используйте что-то вроде этого в своем HTML, чтобы назвать это:

<%= link_to_remote "get users", :url => { :action => "users" } %>

Дополнительная информация о рендеринге vanilla JavaScript из действия Rails: http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-vanilla-javascript

В этом примере создается JavaScript, который вызывает функцию «callback ()» в вашем коде JavaScript с данными JSON. Ваша функция обратного вызова получит строку JSON, которую будет легко проанализировать. Вы также можете использовать to_xml для отправки XML, если вы действительно хотите, но анализ JSON намного проще и быстрее.

Вам не нужен помощник в этом примере, потому что вызов JavaScript, который включает в себя данные, будет поступать непосредственно с вашего контроллера. Шаблон представления отсутствует, поэтому вам не нужен помощник. Лучшее место для кода, который получает @users, будет в классе модели User. Не модель Active Record, просто модель. Код, который выбирает пользователей из удаленного API REST, может быть методом класса. (Если вам лень, тогда вы можете установить @users с ответом REST API прямо в действии контроллера «пользователи». Но это не идеальное использование Rails, потому что весь смысл Rails - это MVC.)

Если вы используете jQuery, то вы также можете использовать функцию getJSON () jQuery, чтобы ваш контроллер отправлял только данные JSON без обратного вызова: http://api.jquery.com/jQuery.getJSON/

Обратите внимание, что это простой вид ответа, который вы, похоже, ищете, но на самом деле это не лучший способ сделать это для более сложных приложений. Лучший способ сделать это сейчас - использовать Backbone.js. http://documentcloud.github.com/backbone/ С помощью Backbone.js вы можете определить коллекцию «users» в JavaScript, установить REST URL этой коллекции (это может быть URL в вашем приложении Rails, которое передает данные из некоторого другого API), а затем Вы просто вызываете users.fetch() в своем JavaScript для загрузки данных. Это очень похоже на Active Record, но для клиентского сайта. Это лучше, потому что он абстрагирует процесс и позволяет обновлять и удалять записи, а также просто перечислять их.

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