我有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文件?有什么帮助吗?
感谢。
答案 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交互。设计第一次测试似乎没问题。