我正在使用ransack谓词构建一个查询,这意味着我需要很多SQL条件的WHERE子句条件。这就是我作为ransanck的search
方法的条件哈希:
这是params[:q]
{"price_gteq"=>"0", "rooms_gteq"=>"1", "baths_gteq"=>"1", "has_photos_true"=>"0", "zone_id"=>"1", "deal_type_eq"=>"1", "s"=>{"0"=>{"name"=>"price", "dir"=>"asc"}}, "price_lteq"=>"2500000", "rooms_lteq"=>"2", "baths_lteq"=>"7", "sector_id_in"=>nil}
这是它生成的SQL查询:
Property.search(params[:q]).result.to_sql
给出了:
SELECT "properties".* FROM "properties" LEFT OUTER JOIN "sectors" ON "sectors"."id" = "properties"."sector_id" WHERE (("properties"."price" >= 0.0 AND "properties"."price" <= 2500000.0)) ORDER BY "properties"."price" ASC
如何在where
子句中包含所有字段?
如您所见,只有:price
字段保留在where
子句中。我也需要将:baths
和:rooms
包含在where
子句中。
我该如何解决?
答案 0 :(得分:0)
幸运的是,我已经解决了自己的问题,发生的事情是我使用UNRANSACKABLE_ATTRS数组为我的模型从排序(Ransack提供的默认排序方法)中排除上述字段,但是我不知道这会影响搜索。无论如何我删除了UNRANSACKABLE_ATTRS数组,搜索中的每个条件都开始按预期工作。 :)