В вашем контроллере:
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, но для клиентского сайта. Это лучше, потому что он абстрагирует процесс и позволяет обновлять и удалять записи, а также просто перечислять их.