2012-12-05 59 views
0

我有一个由开发人员为我构建的小型Rails应用程序,并且代码有很多异常,我尝试更正。我争夺一个奇怪的问题,will_paginate给我下面的错误:Rails 3 will_paginate错误

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

我GOOGLE了错误信息,但没有发现任何解决这个问题有用的,所以我转交给你,计算器。

所以我的搜索形式找到一个位置,看起来像这样:

<%= 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引用这样:从选址模型location.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 

并拿起集合

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以这种方式在网站上的其他地方完美工作,除了集合是在控制器而不是模型中构建的,所以这可能是问题(我不完全确定哪个是正确的方法来做到这一点,但我正在与别人的代码一起努力工作)。

会非常感谢任何指针移动我在正确的方向

回答

1

我不能完全肯定这一点,但我认为你有问题说明如下:

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

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

+0

好 - 赶快 - 谢谢。这里迟到了,我已经喝了一杯啤酒,但是我会在早上测试这个,并且报告回来 –

+0

刚刚测试过并且很有效 - 非常感谢 –

+0

没问题。很高兴听到它的工作。 – RoryB