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.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 に答える