2012-09-01 40 views
0

使用下面的搜索方法我无法检查参数是否存在。 它总是抛出一个NoMethodError(未定义方法`[]'nil:NilClass):检查参数是否有值失败(NoMethodError(未定义方法'[]'为零:NilClass):)

if params ['/ people'] [:age_from] .present? & & params ['/ people'] [:age_to] .present?如果语句和一个性别似乎完全失败,不知道为什么:(

def self.search(params) 

    puts params 

    tire.search(load: true, page: params[:page], per_page: 20) do 
     query do 
     boolean do 
      should { range :age, {gte: params['/people'][:age_from], lte: params['/people'][:age_to]} } if params['/people'][:age_from].present? && params['/people'][:age_to].present? 
      should { string 'gender:male' } if params['/people'][:gender].present && params['/people'][:gender] == "male" 
     end 
     end 
     to_curl 
    end 
    end 

非常混乱: 但这似乎工作

def self.search(params) 
    if params['people'] 
     tire.search(load: true, page: params[:page], per_page: 20) do 
     query do 
      boolean do 
      should { range :age, {gte: params['people'][:age_from], lte: params['people'][:age_to]} } 
      should { string 'gender:male' } if params['people'][:gender] == "male" 
      should { string 'gender:female' } if params['people'][:gender] == "female" 
      end 
     end 
     to_curl 
     end 
    else 
     if Rails.env == "development" 
     @profiles = Profile.where('status IS NOT NULL').page(params[:page]).order("id").per_page(50) 
     else 
     @profiles = Profile.where("user_id != ?", current_user.id).where('status IS NOT NULL').order("id").page(params[:page]).per_page(40) 
     end 
    end 

    end 
+0

你为什么要做'params ['/ people']'?这对我来说看起来不像是有效的语法。 –

回答

1

这是因为params['/people']是零,而零你得到你也应该检查在哈希第一部分的存在,如[]返回完全错误

if params['/people'] && params['/people'][:gender].present && params['/people'][:gender] == "male" 
相关问题