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