我有一个由开发人员为我构建的小型 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 以这种方式在网站的其他地方完美工作,除了集合是在控制器而不是模型中构建的,所以这可能是问题(我不完全确定哪种方法是正确的,但我正在工作用别人的代码所以有点挣扎)。
将非常感谢任何指示我朝着正确的方向前进