Как указать контроллер и действие для пагинации Ajax с Kaminari? - PullRequest
3 голосов
/ 30 октября 2011

Я использую драгоценный камень Kaminari для своего приложения ruby ​​on rails (всем, кто еще использует will_paginate, я бы порекомендовал рассмотреть возможность переключения! Гораздо чище и универсальнее).

У меня проблема в том, что яхотите указать действие контроллера при выполнении нумерации страниц AJAX, т.е.заставить мою пагинацию работать удаленно, например:

 <%= paginate @feeds, :param_name => :page, :remote => true%>

По умолчанию, когда я устанавливаю: remote => true, и добавляю следующие строки в мой файл контроллера "pages" home.js.erb, онработает на моей домашней странице.Мне даже не нужно указывать, на какой js частичный ссылаться;он выбирает автоматически.

  $('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>');
  $('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>')

НО загвоздка в том, что этот div "synopsis" является частичным, который я рендерил на многих страницах моего приложения.Таким образом, на страницах, где контроллер не является моим контроллером «страниц», удаленное разбиение на страницы больше не работает.

Одним из решений было бы добавить эти две строки в файлы js.erb в моих различных контроллерах.Но это было бы излишним и не элегантным.

Я бы предпочел иметь возможность указать в вызове «paginate», какой контроллер и какое действие использовать для удаленного вызова.Тогда я думаю, что напишу действие вроде:

 def paginate_remotely
     respond_to paginate_remotely.js
 end

Как я смогу это сделать?Кажется, это такой простой вопрос, но я не смог понять его.Следующее, конечно, не работает:

 <%= paginate @feed_exchanges, :param_name => :exchange_page, :remote => true, :controller => :exchanges, :action => :paginate_remotely %>

1 Ответ

8 голосов
/ 30 октября 2011

Для тех, кто заинтересован, ответ заключается в том, что вы должны указать контроллер и действие в соответствии со спецификацией: params:

 <%= paginate @feed_exchanges, :params => {:controller => :exchanges, :action => :paginate_remotely}, :param_name => :exchange_page, :remote => true %>

Не забудьте написать маршрут для этого действияв config / rout.rb и создайте частичку js, в моем случае это paginate_remotely.js.erb, содержащую:

 $('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>');
 $('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>')
...