Mysql 如何在RubyonRails中进行查询,如果表单中的任何参数为空,则查询不会检查此参数?

Mysql 如何在RubyonRails中进行查询,如果表单中的任何参数为空,则查询不会检查此参数?,mysql,ruby-on-rails,ruby,Mysql,Ruby On Rails,Ruby,我有带字段的不动产表单: 房地产类型-住宅、公寓 表面粗糙度 最大表面粗糙度 价格 最高价格 房地产数据库中的字段: 房地产类型 表面 价格 我想做一个查询来查找,例如: 查找平面,其中曲面>40和曲面200000,但在本查询中,价格对我来说并不重要。因此参数[:price_max]为空。 但在下一个查询中,有人可能想通过表面和价格来查找。 所以,我现在不知道如何在表单中的某些参数有时是空的,有时不是空的情况下进行查询。我通常这样做: @estates = Estate.all # or ano

我有带字段的不动产表单:

房地产类型-住宅、公寓 表面粗糙度 最大表面粗糙度 价格 最高价格 房地产数据库中的字段:

房地产类型 表面 价格 我想做一个查询来查找,例如: 查找平面,其中曲面>40和曲面200000,但在本查询中,价格对我来说并不重要。因此参数[:price_max]为空。 但在下一个查询中,有人可能想通过表面和价格来查找。
所以,我现在不知道如何在表单中的某些参数有时是空的,有时不是空的情况下进行查询。

我通常这样做:

@estates = Estate.all # or another default scope
@estates = @estates.where(surface_min: params[:surface_min]) if params[:surface_min]
@estates = @estates.where(surface_max: params[:surface_max]) if params[:surface_max]
...

如果您需要范围查询,而不是直接的相等性检查,则需要付出更多的努力。但对您来说,问题在于如何进行可选过滤。这个答案正好解决了这个问题。

不需要。总之,它会引发不必要的冲突query@skam:不,不会。我加上。礼物?对于您的if:@estates=@estates.where'surface>?,参数[:surface\u from]如果参数[:surface\u from]。是否存在@estates=@estates.where'surface<?',如果参数为[:surface\u to],则参数为[:surface\u to]。是否存在?现在我有了正确的查询:选择estates.*从estates内部加入developers ON developers.id=estates.developer\u id,其中estate\u type='flat'和developers.company='Budimex'和surface<'100'Thanx寻求帮助:关于@skams comment,这是rails版本特定的。我相信在rails 4之前。从rails 4开始,ActiveRecord::Baseall立即激发并返回一个数组。它基本上与现在删除的Model.scoped相同,后者返回一个ActiveRecord::Relation范围。因此,基本上,除非您仍在运行rails 3(您不应该这样做),否则您是正确的。如果您可以发布参数,可能会有更好的实现,例如,如果这些参数存储在say params[:search]中,那么像search_params=params[:search]这样简单的东西可能会对您有效。