有没有一种惯用的方法可以在 Rails 中执行 where(params[:foo] || '*')?

Is there an idiomatic way to do where(params[:foo] || '*') in Rails?

如果发送params[:foo],则过滤:

@submissions = Submission.where(foo: params[:foo] )
                         .order("#{params[:sort]} #{ params[:direction]}" )

如果没有,那么

 @submissions = Submission.order("#{params[:sort]} #{ params[:direction]}" )

执行此操作的惯用方法是什么?

是否可以使用通配符:params[:foo] || '*'

与其搜索通配符,我认为您应该按如下方式分隔 where 调用:

@submissions = Submission.order("#{params[:sort]} #{ params[:direction]}")
@submissions = @submissions.where(foo: params[:foo]) if params[:foo]

仅当存在 params[:foo] 时,才会执行 where 方法更新 @submissions 关系。

% 等通配符可以与 sql like 运算符一起使用。但是,为什么要 运行 额外的地方,如果你想要所有的记录?