Подтвердить что ты не робот

Link_to и remote => true + jquery: Как? Помогите?

Я пытаюсь сделать ссылку "Пользователи" на индекс моего сайта rails, чтобы он показывал зарегистрированных пользователей (User.all). НО я хочу, чтобы это отображалось в правой части веб-сайта, как частичное, в div без загрузки всей страницы с самого начала.

Я знал, что это возможно со старым прототипом и remote = > true но с Rails 3.1 и jQuery (и активами) я понятия не имею, как это сделать.

Может ли кто-нибудь помочь или показать мне путь к учебнику?

4b9b3361

Ответ 1

На самом деле это довольно просто, это просто кажется большим делом, потому что оно новое. В принципе, с новой ненавязчивой поддержкой javascript рельсы ujs script предоставляют множество событий, к которым вы можете привязать функции javascript, это:

  • ajax: beforeSend - уволен до отправки
  • ajax: успех - срабатывает после отправки, содержит ответ
  • ajax: завершено - запущено после события успеха
  • ajax: ошибка при запуске ошибок

все, что вам нужно сделать, это написать функцию (которую вы переносите в $document.ready), которая по очереди связывает некоторые анонимные функции с каждым из этих событий или просто интересующие вас события.

Например, предположим, что у вас есть div, в который вы хотите поместить данные ответа с идентификатором "response_data", и у вас есть ссылка с идентификатором "ajax_trigger". Что-то вроде этого:

<%= link_to "My Link", some_model_path(@model_instance), 
                       :remote => true, :html => {:id => "ajax_trigger"} %>
<div id="response_data">
</div>

Все, что вам нужно сделать, это предоставить функцию, подобную приведенной ниже, чтобы поместить ответ с сервера в div:

$(document).ready(
     function(){
          $("a#ajax_trigger").bind("ajax:success",
                   function(evt, data, status, xhr){
                        //this assumes the action returns an HTML snippet
                        $("div#response_data").html(data);
           }).bind("ajax:error", function(evt, data, status, xhr){
                    //do something with the error here
                    $("div#errors p").text(data);
           });
});

Действительно, все, что вы делаете с javascript, обрабатывает ответ, когда он возвращается с сервера. Вам действительно не нужно ничего делать, чтобы инициировать запрос XHR, и вы также можете безопасно хранить этот метод в файле .js, который обрабатывается как статический актив. Если вы используете Rails 3.1, вы должны поместить его в файл с соответствующим именем javascript, который соответствует контроллеру. В вашем контроллере вам нужно убедиться, что вы указываете: layout = > false в методе responses_with(), таким образом, контроллер просто возвращает частичный или шаблон, который он отображает, а не полную страницу. Эта настройка также работает с действиями, которые возвращают javascript для выполнения клиентом, а также JSON, в зависимости от того, какой тип данных вы указываете в запросе.

Я нашел этот пост в блоге весьма полезным: http://www.alfajango.com/blog/rails-3-remote-links-and-forms/