ActiveRecord:查询多个参数,包括搜索(如果存在)

时间:2014-06-26 16:47:44

标签: sql ruby-on-rails activerecord conditional-statements multiple-conditions

我有一个表单,我有三个输入字段,用户可以 - 很好用。两个是下拉列表,一个是日期,另一个是标签。最后一个是搜索输入,它连接到后端的elasticsearch。

现在我有一个问题是找到一个合适的where子句来禁止所有情况,即所有可能的组合。我可以在this answer中做一些事情,但在我的情况下,我认为这会导致代码混乱,这就是我寻找更优雅方式的原因。标签和视频具有has_and_belongs_to_many-associations。

这是我到目前为止所做的:

if params[:sort].blank? || params[:sort].nil?
  params[:sort] = sort_column + ' ' + sort_direction   
else
  if params[:sort] == "date"
    params[:sort] = "created_at"
  elsif ...
  end     
end

if params[:tag].blank? || params[:tag].nil?
  params[:tag] = "*"
end

if params[:q].blank? || params[:q].nil?
  params[:q] = "*"
end

我的查询

@models = @Model.joins(:tags).where(tags: {name: params[:tag]}, videos: {event_id: params[:event_id]}).order(params[:sort]).page(params[:page]).search(params[:q]).records

最优雅的解决方案是什么?上面的那个不起作用。对于仅选择标记的网址,它将返回所有元素。

0 个答案:

没有答案