0

以下の検索方法を使用すると、パラメーターが存在するかどうかを確認できません。これは常に NoMethodError をスローします (nil:NilClass に対して未定義のメソッド `[]'):

if params['/people'][:age_from].present? && params['/people'][:age_to].present? if ステートメントと性別のステートメントは完全に失敗しているようで、理由がわかりません:(

   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
4

1 に答える 1

1

これparams['/people']は nil であり、 nil[] は取得しているエラーを正確に返すためです。

次のように、ハッシュの最初の部分の存在も確認する必要があります。

if params['/people'] && params['/people'][:gender].present && params['/people'][:gender] == "male"
于 2012-09-01T09:28:43.487 に答える