我有一个表单,我有三个输入字段,用户可以 - 很好用。两个是下拉列表,一个是日期,另一个是标签。最后一个是搜索输入,它连接到后端的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
最优雅的解决方案是什么?上面的那个不起作用。对于仅选择标记的网址,它将返回所有元素。