Ruby on rails Rails中的where(params[:foo]| |';*';)是否有一种惯用方法?

Ruby on rails Rails中的where(params[:foo]| |';*';)是否有一种惯用方法?,ruby-on-rails,ruby-on-rails-4,rails-activerecord,Ruby On Rails,Ruby On Rails 4,Rails Activerecord,如果发送了params[:foo],则过滤: @submissions = Submission.where(foo: params[:foo] ) .order("#{params[:sort]} #{ params[:direction]}" ) 若否,则 @submissions = Submission.order("#{params[:sort]} #{ params[:direction]}" ) 做这件事的惯用方法是什么 是否

如果发送了
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
运算符一起使用。但是,如果您想要所有记录,为什么要运行额外的where?

您说的“运行额外的where”是什么意思?当您有
where(“foo-like“%””)时,这将执行where子句。另外,我希望您已经在
foo
列上定义了一个索引。您可以将
where
s链接起来,直到需要时才对它们进行评估(即不调用DB),因此您可以在新行中添加
。where(…)
子句,这对于执行条件
where
s非常有用。vee在这里的模式是我过去使用过的,是一个很好的模式。@vee-好的,我明白了。我提出了同样的解决方案,但对我来说似乎不是很有说服力。。。