我环顾四周,但我无法找到接近答案的东西。我认为这是一个非常独特的优势,但我并不感到惊讶。
我有一个索引页面,其中显示所有潜在客户,但我有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
任何帮助将不胜感激。我要继续尝试。将根据我的发现进行更新。
答案 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