3

Rails 3.2でそれぞれオプションである複数のパラメーターで検索/フィルター処理するにはどうすればよいですか?以下の設定では、現在次のエラーが発生しています。どんな助けでも大歓迎です。

undefined method `paginate' for nil:NilClass

Application Trace | Framework Trace | Full Trace
app/controllers/contacts_controller.rb:50:in `index'

これが私のcontacts_controllerのインデックスアクションです:

def index
  city = params[:city]
  state = params[:state]
  zip = params[:zip]
  @contacts = Contact.search(city,state,zip).paginate(:page => params[:page], :per_page => items_per_page)
end

そして、これが私の連絡先モデルの検索方法です。

def self.search(city, state, zip)
  joins(:profile => :addresses)
  .where("city like ?", "%#{city}%") unless city.blank?
  .where("state = ?", state) unless state.blank?
  .where("zip like ?", "%#{zip}%") unless zip.blank?
end
4

2 に答える 2

7

より明確に返すようにしてください。たとえば、次のようにします。

def self.search(city, state, zip)
  query_obj = joins(:profile => :addresses)
  query_obj = query_obj.where("city like ?", "%#{city}%") unless city.blank?
  query_obj = query_obj.where("state = ?", state) unless state.blank?
  query_obj = query_obj.where("zip like ?", "%#{zip}%") unless zip.blank?

  query_obj
end
于 2013-01-29T05:59:23.290 に答える
0
def self.search(city, state, zip)
  conditions = {:"city like %?%" => city, :state => state, :"zip like %?%" => zip}
  conditions.delete_if {|key,val| val.blank? }
  self.joins(:profile => :addresses)
  .where(conditions)
end

関数Contact.search(city、state、zip)はnilを返すため、nil.paginateのエラーが発生します。

于 2013-01-29T06:06:53.377 に答える