1

これはレールほどneo4jではないかもしれません。でも多分私は間違っている

パラメータが特定の値である場合の状況を処理するための提案を探しています。例えば。私のクエリでは

@friends_events = current_user.friends.events(:e, :rel).where("rel.admin = {admin_p} AND e.size_max < {size_p}", uuid: @event_id, primary_category: params[:primary_category] ).params(admin_p: true, size_p: params[:group_max].to_i)

イベントにはsize_max、整数または のプロパティがありますany。今、私はany空白の値を持っています。基本的に、いずれかを選択した場合、クエリでそのパラメーターをすべて無視する (または同様の方法で処理する) 必要があります。それをごまかす方法は、外部の状況を処理することです。いずれかが選択され、値が空白の場合、ヒットしない非常に高い数値に手動で設定します。

現在、奇妙なハッキーな方法を使用せずに、クエリの内外でこれを行う方法がわかりません。提案?

アップデート

あなたが提案したように私の質問があります。および「検証」を処理する方法

@friends_events = current_user.friends.events(:e, :rel).where("rel.admin = {admin_p} #{size_string}", uuid: @event_id, primary_category: params[:primary_category] ).params(admin_p: true, size_p: size_param)

そして、size_param気に入らない空白に変更しました。両方のケースを処理できるようにしたかったのです。たとえば、最初にページにアクセスしたときのパラメータは空で、送信すると空白になります。Nil はシナリオ 1 では機能しますが、シナリオ 2 では機能しません。||ケースは必要ですか?

        def size_string
          'AND e.size_max < {size_p}' if params[:group_max]
        end

        def size_param
            #has not taken in blank scenario
          params[:group_max].blank? ? false : params[:group_max].to_i
        end

そして私の見解では、

<% if !@friends_events.blank? %>

私のエラーは

Don't know how to compare that. Left: 0 (Long); Right: false (Boolean)私の見解では上の行から。に変更.blank?すると.nil?、フィルターが通過できるようになります (ただし、正しくありません)。

4

1 に答える 1

2

あなたが特定したそれを処理する方法は、最良の選択肢のようです. データベースにヒットする前にそれを評価するのはもう少し手間がかかるかもしれませんが、ユーザーが望む場合は、そのプロパティを完全に省略することでパフォーマンスを向上させることができますany。>または<を使用したフィルタリングはインデックスを使用しないため、十分なレコードがある場合は遅くなる可能性があると言われています。次のようなものから始めます。

def where_this_happens
  @friends_events = current_user.friends.events(:e, :rel)
    .where("rel.admin = {admin_p} #{size_string}", uuid: @event_id, primary_category: params[:primary_category] )
    .params(admin_p: true, size_p: size_param)
end

def size_string
  'AND e.size_max < {size_p}' unless params[:group_max].blank?
end

def size_param
  params[:group_max].nil? ? false : params[:group_max].to_i
end

パラメータを設定して使用しなくても害はsize_pありませんが、餌を与えると吠えると確信していますnil

于 2014-12-02T22:32:17.300 に答える