Kaminari paginate在不同的控制器混合设计(检查答案)

时间:2015-08-17 23:48:18

标签: ruby-on-rails-4 pagination kaminari

我有2个非嵌套模型,User和Record。目标是在users / show

中对名为@records的@ user.records进行分页

这是记录部分:

at app / models / record.rb

class Record < ActiveRecord::Base    

default_scope lambda { order('records.created_at DESC') }
paginates_per 48

end

我在唱片/索引上使用Kaminari,效果很好。问题是在users / show

使用它

这里是app / controllers / users_controller.rb

def show

   @user = User.find(params[:id])
   @records = @user.records.page params([:page])

   # Not working alternative:
   # @records = @user.records.page(params[:page]).per(48)
end

这是触发显示的视图,是在users / show ...

中呈现的列表
<% @records.each do |record| %>
   <%= link_to (image_tag record.thumbnail.url(:list)), record %>
   <%= link_to record.name, record %>
<% end %>
<%= paginate @records %>

错误非常有趣。实际上,错误是:

没有路由匹配{:action =&gt;“show”,:controller =&gt;“users”,:controllers =&gt; {“registrations”=&gt;:registrations},:id =&gt;“1”, :页=&GT;零}

意思是paginate @records正在构建一个对Active Record的请求,希望找到我在该控制器中没有的动作(我正在使用设计)。因此,在Kaminari说,有可能通过params,如下:

<%= paginate @records, :params => { :controller => 'foo', :action => 'bar' }, :remote => true  %>

然后错误变成这样:

没有路由匹配{:action =&gt;“remote_records_pagination”,:controller =&gt;“records”,:controllers =&gt; {“registrations”=&gt;:registrations},:id =&gt;“1”, :页=&GT;零}

我在records_controller中定义了remote_recors_pagination,渲染了records_paginate_remotely.js,但是分页方法找不到它。为什么它一直显示:控制器注册?

最后,改变这样的观点:

<%= paginate @user.records %>
   <% @user.records.each do |record| %>
       <%= link_to (image_tag record.thumbnail.url(:list)), record %>
       <%= link_to record.name, record %>
    <% end %>
<% end %>

产生未定义的方法错误。

该示例是否可以使用或不使用js文件?有什么帮助吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我发布了一个答案,因为问题出在路线上,并且与设计相结合,常见的组合可能会让更多人找到。

所以,路线是这样的:

devise_for :users
  resources :users, only: :show, , :controllers => { :registrations => :registrations } do
    member do
      get :following, :followers
    end
  end

要将其更改为:

devise_for :users, :controllers => { :registrations => :registrations }
  resources :users, only: :show do
    member do
      get :following, :followers
    end
  end

允许paginate命令正常与Active Record交互。设计第一次测试似乎没问题。