我有2个非嵌套模型,用户和记录。目标是对@user进行分页。@records在users/show
记录部分:
在app/模型/record.rbclass 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
允许分页命令与活动记录正常交互。设计第一次测试似乎没问题。