使用will_paginate

时间:2016-06-01 21:58:51

标签: ruby-on-rails ruby

用户has_many土豆。土豆属于一个用户。马铃薯有很多怪癖。 Quirks属于土豆。

我想在我的用户节目和Paginate中使用如下所示的will_paginate gem一起显示我的土豆及其相关的怪癖。

potato_names -> sweet potato    russet potato   mystery potato
quirk_name ->   shiny           rough           purple
quirk_name ->   big             brown           orange
quirk_name ->   old             medium          blue

我的用户控制器预分页

UsersController

  def show
    @user = User.find(params[:id])
    @potatoes = @user.potatoes
    @quirks = Quirk.where(potato: @potatoes)
  end

我可以通过更改UsersController -

来对土豆进行分页
@potatoes = @user.potatoes.paginate(page: params[:page])

和用户 - show.html.erb

<%= @potatoes.potato_name %>
<%= will_paginate @potatoes %>

但是我怎么能得到用土豆分页的怪癖,这样当我点击下一步时我会得到与下一组相关的土豆和怪癖?最初我得到的土豆分页和怪癖只是展示自己,这就是为什么我以前没有显示怪癖。我不太了解.pagination电话。

我可以调用:param_name指定页码的参数名称,并确保它正常工作。

will_paginate documentation

我能做到

UsersController
  def show
    @user = User.find(params[:id])
    @potatoes = @user.potatoes.paginate(page: params[:potatoes_page])
    @quirks = Quirk.where(potato: @potatoes).paginate(page: params[:quirks_page])
  end

show.html.erb

<%= render @potatoes %>
<%= render @quirks %>

<%= will_paginate @potatoes, :params_name => 'potatoes_page' %>
<%= will_paginate @quirks, :params_name => 'quirks_page' %>

_potato.html.erb

 <%= potato.potato_name %>

_quirk.html.erb

 <%= quirk.quirk_name %>

这应该给我土豆和怪癖分开...但当我下一页土豆,土豆是分页和怪癖正在消失。当我下一页怪癖页面时,土豆保持不变,只有怪怪发生变化。

我认为上述错误是因为我在土豆查询中调用分页,然后使用土豆查询再次调用分页。

1 个答案:

答案 0 :(得分:0)

整体看起来应该是:

UsersController
  def show
    @user = User.find(params[:id])
    @potatoes = @user.potatoes.paginate(page: params[:page])
    @quirks = Quirk.where(potato: @user.potatoes).paginate(page: params[:page])
  end

show.html.erb

<%= render @potatoes %>
<%= render @quirks %>

<%= will_paginate @potatoes, :params_name => 'page' %>

_potato.html.erb

<%= potato.potato_name %>

_quirk.html.erb

<%= quirk.quirk_name %>

错误在于在UsersController中对@potatoes和@quirks进行分页时调用分页。另外我更改了:params_name回到默认页面,因此两个模型会同时更改。要单独更改它们,请使用potato_page和quirks_page,如问题所示。我也删除了

<%= will_paginate @quirks %>

因为我有两个下一个酒吧。如果你要单独更改@potatoes和@quirks,则需要包含它。