Neo4j gem - 查询依赖于参数值

时间:2014-12-02 21:52:57

标签: ruby-on-rails parameters neo4j neo4j.rb

这可能不像neo4j那样多,因为它是rails。但也许我错了

我正在寻找有关在参数是特定值时处理情况的建议。例如。在我的查询中

@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作为空白值。基本上如果他们选择任何一个,我需要在查询中一起忽略该参数(或以类似的方式处理它)。欺骗它的一种方法是处理外面的情况,如果选择任何并且值为空,我手动将其设置为一个非常高的数字,但不会被击中。

不知道如何在查询内部或外部执行此操作,而现在没有奇怪的hacky方式。建议?

更新

我按你的建议查询了我的问题。以及处理“验证”的方法

@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更改为空白,但它并不喜欢。我希望能够处理这两种情况。例如当你第一次点击页面时,params是空的,当你提交时,它是空白的。 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?可让过滤器通过(但不正确)

1 个答案:

答案 0 :(得分:2)

您确定的处理方式似乎是最佳选择。在点击数据库之前评估它可能需要更多的工作,但如果用户想要any,则可以通过完全省略该属性来获得性能提升。我被告知过滤使用&gt;或&lt;,不使用索引,因此如果您有足够的记录,它可能会很慢。从这样的事情开始:

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它会咆哮。