我搜索了如何将空数组传递给 ransack,例如:
@search = PromotionsRetailer.search(retailer_id_in: [])
这条sql语句:
"SELECT `promotions_retailers`.* FROM `promotions_retailers` "
我找到了这个 link ,将 -1 添加到空数组,所以我使用了 search(retailer_id_in: ([] + [-1]))
。
- 有比这个解决方案更好的解决方案吗?
- 如何在促销表中使用
retailer_id
进行搜索,如果我在促销/零售商之间有多对多关系而不使用 breaking tablePromotionsRetailer
by ransack gem ?
最佳答案
问题的第一部分很重要。这应该是一个单独的问题。
不幸的是,没有比以下更优雅的方式来应对它了:
search(retailer_id_in: ([] + [-1]))
问题出在 gem 的某个地方。如果你传递空数组,或者填充了nil
值的数组作为参数,SQL中会有join,但是所有的条件都会被忽略,例如:
ruby :
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"
问题的第二部分是关于使用 ransack 搜索 HABTM 关系,这在 Rails 3.1 Ransack HABTM 中有解释。还不错。
因此:
Promotion.ransack({retailer_id_in: [1,2,3]}).result
您不应该使用 PromotionsRetailer
类本身。
关于ruby-on-rails - 使用 ransack 按空列表搜索多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25766660/