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



我有2个非嵌套模型,用户和记录。目标是对@user进行分页。@records在users/show

记录部分:

在app/模型/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=>"show",:controller=>"users",:controllers=>{"registrations"=>:registrations},:id=>"1",:page=>nil}

含义paginate @records正在构建一个请求活动记录,希望找到一个动作,我没有在该控制器(我使用的是设计)。所以在Kaminari指令中说可以传递参数,像这样:

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

然后错误变成这样:

路由不匹配{:action=>"remote_records_pagination",:controller=>"records",:controllers=>{"registrations"=>:registrations},:id=>"1",:page=>nil}

我有一个remote_recors_pagination定义在records_controller,呈现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文件的例子?任何帮助吗?

谢谢。

我找到了一个解决方案。我发布一个答案,因为问题是在路线和混合设计,常见的组合,更多人可能会发现。

所以,路由是这样的:

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

允许分页命令与活动记录正常交互。设计第一次测试似乎没问题。

相关内容

最新更新