Rails с пейджингом Kaminari и удаленной формой

Я разрабатываю проект с рельсами 3.1.3 и kaminari 0.13.0. У меня есть две модели Статья и Комментарий. Статья имеет много комментариев. Моими контроллерами являются ArticlesController, которые в основном делают все, кроме создания комментариев. Это обрабатывается CommentController. На мой взгляд, для 'articles#show' у меня есть форма для создания новых комментариев. Я хочу, чтобы эта форма отправлялась удаленно (:remote => true). У меня есть список комментариев прямо под ним, который разбит на страницы с kaminari. Естественно, я хочу, чтобы список обновлялся. Однако, поскольку комментарий отправляется в «comments#create», ссылки на страницы становятся неверными при повторном отображении. Я попытался добавить <%= paginate @comments, :params => { :controller => "articles", :action => 'show' } %>, чтобы они указывали на правильный URL-адрес, однако это не решило мою проблему. Когда список перерисовывается, я получаю:

ActionView::Template::Error (No route matches 
{:utf8=>"✓",:authenticity_token=>"5VJqDLifXX0O/ttq9rNY0POUbsN678I6Au2iL2Qcv7w=",
 :comment=>{"name"=>"4004053","content"=>"asdf"},:commit=>"Create Comment",
 :action=>"show",:controller=>"articles",:article_id=>"4f24fbb4f4b7b863a4000009",
 :page=>nil}):

Я могу решить эту проблему, добавив дополнительный атрибут для разбиения на страницы и сделав его <%= paginate @comments, :custom_url => "/articles/#{@article._id}" %>. Затем я могу изменить представления kaminari, чтобы установить URL-адрес моего custom_url, если он есть. Однако мне не очень нравится эта идея.

Я что-то упускаю? Есть лучший способ сделать это?

Заранее спасибо!


person Ivaylo Petrov    schedule 30.01.2012    source источник


Ответы (1)


Оказалось, что

<%= paginate @comments, :params => { :controller => "articles", :action => 'show' } %>

почти сработало, однако мне нужно было добавить :id => @article.id, чтобы стало

<%= paginate @comments, :params => { :controller => "articles", :action => 'show', :id => article.id } %>

Довольно глупая ошибка, теперь я вижу. Я недостаточно понял маршрутизацию.

person Ivaylo Petrov    schedule 03.02.2012