我搜索了如何将空数组传递给ransack,例如:
@search = PromotionsRetailer.search(retailer_id_in: [])
这个sql语句:
"SELECT `promotions_retailers`.* FROM `promotions_retailers` "
我找到了这个link,将-1添加到空数组,所以我使用了search(retailer_id_in: ([] + [-1]))
。
retailer_id
分区表,那么如何在促销表中使用PromotionsRetailer
进行搜索?答案 0 :(得分:0)
问题的第一部分至关重要。这应该是一个单独的问题。
不幸的是,没有更优雅的方式来应对它,而不是:
search(retailer_id_in: ([] + [-1]))
问题出在宝石的某个地方。如果您传递空数组或填充了nil
值的数组作为参数,则会在SQL中加入,但所有条件都将被忽略,例如:
红宝石:
Article.ransack({authors_id_in: [nil, nil, nil]}).result
SQL:
SELECT "articles".* FROM "articles" LEFT OUTER JOIN "articles_authors" ON "articles_authors"."article_id" = "articles"."id" LEFT OUTER JOIN "authors" ON "authors"."id" = "articles_authors"."author_id"
你的第二部分问题是关于使用搜索来搜索HABTM关系,Rails 3.1 Ransack HABTM中对此进行了解释。
因此:
Promotion.ransack({retailer_id_in: [1,2,3]}).result
您不应该使用PromotionsRetailer
类本身。