2014-09-10 51 views
4

我搜索有關如何通過空數組洗劫,例如:由空列表搜索許多一對多的關係,利用洗劫

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

這條SQL語句:

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

我發現這個link,爲-1加空數組,所以我用search(retailer_id_in: ([] + [-1]))

  1. 任何解決方案都比這個解決方案更好?
  2. 如何在促銷表中使用retailer_id進行搜索,如果我在促銷/零售商之間沒有使用折扣表的多對多關係PromotionsRetailerransack gem

回答

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" 

你問題的第二部分是使用搜查,這是在Rails 3.1 Ransack HABTM相當不錯的解釋,通過HABTM關係搜索。

因此:

Promotion.ransack({retailer_id_in: [1,2,3]}).result 

你不應該使用PromotionsRetailer類本身。