Kaminari和额外的参数

时间:2014-07-27 18:53:14

标签: ruby-on-rails ruby pagination kaminari

我环顾四周,但我无法找到接近答案的东西。我认为这是一个非常独特的优势,但我并不感到惊讶。

我有一个索引页面,其中显示所有潜在客户,但我有3种不同的方式来展示它:未审核,已审核,全部。要实现这一点,我使用current_page?帮手,添加:?unreviewed = true为url。

这本身没有问题,当我加入kaminari进行分页时,页面参数似乎弄乱了这个并使其成为current_page?不能阅读额外的参数。

我该如何解决这个问题,还是有更好的方法来实现这个目标?

这是使用Rails 4和Kaminari 0.15.1

控制器:

def index
    @leads = Lead.order(:id).page params[:page]
    @reviewed_leads = Lead.where(reviewed: true).order(:id).page params[:page]
    @unreviewed_leads = Lead.where(reviewed: nil).order(:id).page params[:page]
    current_page_no = Lead.page
end

index.html.erb

         <tr>
                <td colspan="7" style="text-align: center;">
                    <div class="pagination pagination-table">

                        <% if current_page?(controller: 'leads', action: 'index', unreviewed: 'true') %>
                        <%= paginate @unreviewed_leads %>
                        <% elsif current_page?(controller: 'leads', action: 'index', reviewed: 'true') %>
                        <%= paginate @reviewed_leads %>
                        <% else %>
                        <%= paginate @leads %>
                        <% end %>
                    </div>
                </td>
            </tr>

当URL看起来像:

时有效
/closingloop/leads?unreviewed=true

就像这样,current_page不能正确读取它并且它总是显示@leads实例变量

/closingloop/leads?page=2&unreviewed=true

任何帮助将不胜感激。我要继续尝试。将根据我的发现进行更新。

1 个答案:

答案 0 :(得分:3)

将控制器操作更改为

def index
  @leads = Lead.where(reviewed: params[:reviewed]).order(:id).page(params[:page])
end

然后在您看来,您不必检查当前页面,只需确保传递params[:reviewed]

的值
<%= paginate @leads, params: { reviewed: params[:reviewed] } %>

<强>更新

正如评论中所指出的,这不适用于显示混合线索。这可以通过创建范围

来实现
# lead model

def self.filter_by_reviewed_status(status)
  case status
  when nil     then scoped
  when 'true'  then where(reviewed: true)
  when 'false' then where(reviewed: false)
  end
end

然后在您的控制器中,使用它来获取潜在客户

@leads = Lead
  .filter_by_reviewed_status(params[:reviewed])
  .order(:id)
  .page(params[:page])

请务必在链接中将params[:reviewed]设置为true,false或nil(根本不通过)以获取您需要的leads