2012-12-05 3 views
0

개발자가 나를 위해 만든 작은 레일즈 앱을 가지고 있으며, 코드에 수정하려고하는 많은 예외가 있습니다. 나는 will_paginate 나에게 다음과 같은 오류를주는 이상한 문제 싸우고 오전 : 나는 오류 메시지를 검색 좀했지만,이 문제를 해결하는 데 유용 아무것도 발견하지 않았습니다will_paginate with Rails 3

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

을, 그래서 나는 당신에게 유래를 켜십시오.

그래서 위치를 찾아 내 검색 양식은 다음과 같습니다 : 위치 모델 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 

그리고 픽업 : 같은 home_controller.rb 참조

<%= 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%> 

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 %> 

그래서 이것은 정확한 검색 결과를 꺼내서 올바른 첫 페이지 및 페이징 블록을 표시하지만 다른 페이지에 액세스하려고하면 (@ 홈에 대한) 위의 오류와 충돌합니다.

will_paginate는 모델이 아닌 컨트롤러에 콜렉션이 내장되어 있다는 점을 제외하면 사이트의 다른 곳에서 완벽하게 작동합니다. 그래서 문제가 될 수 있습니다. (이 작업을 수행하는 올바른 방법은 확실하지 않지만 나는 다른 누군가의 코드와 함께 일하고 있으므로 약간 어려움). 어떤 포인터가 올바른 방향으로 이것에 대해 완전히 확실하지 않다

답변

1

에서 저를 이동하는

매우 감사 드리겠습니다,하지만 난 당신이 가지고있는 문제는 여기에 설명되어 생각 :

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

기본적으로 양식의 http 메소드를 GET으로 변경해야합니다 (양식 태그에 ": method => 'get' '삽입). 이후 검색 결과 페이지를 볼 때 매개 변수가 손실되지 않도록해야합니다. .

+0

좋은 캐치 - 감사합니다. 여기에 늦었어요. 맥주를 마 셨습니다.하지만 아침에 이것을 시험해보고 –

+0

그냥 시험해 보았습니다. - 많은 감사합니다. –

+0

문제 없습니다. 듣기 좋다. – RoryB