0

我有一个由开发人员为我构建的小型 Rails 应用程序,代码有很多我正在尝试纠正的异常情况。我正在与 will_paginate 解决一个奇怪的问题,给我以下错误:

The @home variable appears to be empty. Did you forget to pass the collection object for will_paginate?`

我已经用谷歌搜索了错误消息,但没有找到任何有用的解决这个问题的方法,所以我求助于你,stackoverflow。

所以我查找位置的搜索表单如下所示:

<%= form_for :search_place, :url => search_results_home_index_path, :html => {:class=>""} do |f| %>
  <%= f.hidden_field :search_type, :value=>2 %>
  <%= f.text_field :city,{:placeholder => "Town", :class=>"input-small"} %>
  <%= f.text_field :county,{:placeholder => "County", :class=>"input-medium"} %>
  <%= f.select(:country, db_countries.map(&:country), {:include_blank => 'Select a Country'}, :class=>"input-medium") %>
<%end%>

其中引用 home_controller.rb 如下:

def search_results
  :
  elsif !params[:search_place].blank?
    session[:search_params] = params[:search_place]
    @documents = Location.search_location(params[:search_place], params[:page])
  end

并从 Location 模型 location.rb 中获取集合

def self.search_location(search_params,page,per_page=50)
  condition_str  = ""
  condition_str += "(UPPER(locations.town) like '%#{search_params[:city].upcase}%' OR UPPER(locations.town) like '%#{search_params[:city].upcase}%') AND " unless search_params[:city].blank?
  condition_str += "(UPPER(locations.county) like '%#{search_params[:county].upcase}%' OR UPPER(locations.county) like '%#{search_params[:county].upcase}%') AND " unless search_params[:county].blank?
  condition_str += "(UPPER(locations.country) like '%#{search_params[:country].upcase}%' OR UPPER(locations.country) like '%#{search_params[:country].upcase}%') " unless search_params[:country].blank?

  unless condition_str.blank?
    self.where(condition_str).paginate(:per_page=>per_page,:page=>page)
  else
    self.where("1=0").paginate(:per_page=>1,:page=>page)
  end

end

搜索结果显示在搜索结果表中,如下所示:

<%= render "documents/document_common_list"%> 
<%= will_paginate @documents, :renderer => BootstrapLinkRenderer %>

因此,这会提取正确的搜索结果并显示正确的第一页和分页块,但如果我尝试访问其他页面,则会因上述错误(关于 @home)而崩溃。

will_paginate 以这种方式在网站的其他地方完美工作,除了集合是在控制器而不是模型中构建的,所以这可能是问题(我不完全确定哪种方法是正确的,但我正在工作用别人的代码所以有点挣扎)。

将非常感谢任何指示我朝着正确的方向前进

4

1 回答 1

1

我对此并不完全确定,但我认为您遇到的问题描述如下:

https://github.com/mislav/will_paginate/wiki/Simple-search

基本上,您需要将表单上的 http 方法更改为 GET(通过在表单标记中插入 ":method => 'get'"),这样当您查看后面的搜索结果页面时它不会丢失您的参数。

于 2012-12-05T22:46:43.060 回答