我有一个表单,其中有三个输入字段,用户可以很好地使用。两个是下拉菜单,一个是日期,另一个是标签。最后一个是搜索输入,连接到后端的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,它将返回所有元素。