ruby-on-rails - 使用 ransack 按空列表搜索多对多关系

标签 ruby-on-rails ransack

我搜索了如何将空数组传递给 ransack,例如:

@search = PromotionsRetailer.search(retailer_id_in: [])

这条sql语句:

"SELECT `promotions_retailers`.* FROM `promotions_retailers` "

我找到了这个 link ,将 -1 添加到空数组,所以我使用了 search(retailer_id_in: ([] + [-1]))

  1. 有比这个解决方案更好的解决方案吗?
  2. 如何在促销表中使用 retailer_id 进行搜索,如果我在促销/零售商之间有多对多关系而不使用 breaking table PromotionsRetailer 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/

相关文章:

ruby-on-rails - 到目前为止已经使用了多少测功小时?

ruby-on-rails - Zeus 未在 Rails 4.1 Ruby 2.1.1 设置上启动?

ruby-on-rails - 橡胶 : Unmet Dependencies for libapache2-mod-passenger

ruby-on-rails - Ruby 异常的语法

ruby-on-rails-3 - 如何使用 ransack gem 搜索 Spree::Orders 和 associations

ruby-on-rails - RoR Ransack 搜索问题

javascript - 从 Rails 设置 document.domain 的 DRY 方式

ruby-on-rails - Kaminari 和 Ransack gem

ruby-on-rails - Rails 4 + Ransack : lteq does not work well with datetime?

ruby-on-rails - ruby 在 rails 上。搜查搜索协会