在我的控制器中,我有以下设置
控制器
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 %>
所以我使用的是paginate,但我得到的错误是“未定义的方法`total_pages'”
进行研究后,此错误来自未设置页面限制,而在params [:search]
if语句中未执行此操作。有没有办法保持我当前的设置,但也包括一个分页部分?
答案 0 :(得分:1)
只需为这些查询是否分页设置一个标志。
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])
答案 1 :(得分:0)
你可以这样做:
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
我希望这对你有所帮助。