在我的控制器中,我设置了以下
控制器
if params[:search]
@beers = Beer.search(params[:search]).order("created_at DESC")
else
@beers = Beer.paginate(page: params[:page])
end
型号
Beer.search
来自我的模型,该模型具有此方法定义的
def self.search(search)
where("name LIKE ?", "%#{search}%")
end
查看
最后,在我看来,我有这个代码
<%= will_paginate %>
<ul class="beers">
<%= render @beers %>
</ul>
<%= will_paginate %>
所以我使用分页,但我得到的错误是"未定义的方法`total_pages'"
经过研究,这个错误来自于没有设置页面限制,而params [:search]
if语句中没有这样做。有没有一种方法可以保持我当前的设置,但也包括一个分页部分?
只需为这些查询是否分页设置一个标志。
if params[:search]
@beers = Beer.search(params[:search]).order("created_at DESC")
else
@beers = Beer.paginate(page: params[:page])
@paginated = true
end
然后检查是否设置了该标志。
<% if @paginated %>
<%= will_paginate %>
<% end %>
<ul class="beers">
<%= render @beers %>
</ul>
<% if @paginated %>
<%= will_paginate %>
<% end %>
或者也对搜索结果进行分页@beers = Beer.search(params[:search]).order("created_at DESC").paginate(page: params[:page])
您可以这样做:
if params[:search]
@beers = Beer.search(params[:search]).paginate(page: params[:page]).order("created_at DESC")
else
@beers = Beer.paginate(page: params[:page])
end
要重构代码,请执行以下操作:
控制器
@beers = Beer.search(params[:search]).paginate(page: params[:page]).order("created_at DESC")
型号
def self.search(search = nil)
if search.present?
where("name LIKE ?", "%#{search}%")
else
all
end
end
我希望这对你有帮助。