这可能不像 rails 那么多 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?
允许过滤器通过(尽管不正确(
您确定的处理方式似乎是最佳选择。在访问数据库之前评估它可能需要更多工作,但如果用户想要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
它会向你吠叫。