0

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

现在我的问题是找到一个合适的 where 子句来禁止所有情况,即所有可能的组合。我可以在这个答案中做类似的事情,但就我而言,我认为这会导致代码混乱,这就是为什么我正在寻找一种更优雅的方式。标签和视频有一个 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

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

4

0 回答 0