2014-10-06 66 views
2

我有一個名爲Box的Rails模型。每個Box對象都有一個列:產品,這是一個字符串數組,包含當時存儲在其中的所有產品。選擇包含數組屬性值的Rails對象

對於每個Box對象,可能相同的值存儲在另一個Box中。

是否有一個查詢,我可以用來返回所有的價值x存儲在框中的產品?

我知道「where」適用於查找具有特定值的對象,並且您可能使用「include?」的數組,但在遇到這種情況時無法使用任何方法可能。

回答

3

有這項工作之前,這裏張貼解答編輯得不錯,但我環顧四周,發現另一個更簡潔的查詢。

selected_boxes = Box.where("?=ANY(products)", x)

其中x是您正在尋找中的每個對象的值。

+0

我正在使用Rails 4.2.5,我無法使用此查詢。它說「錯誤的參數數量(給定2,預期1)」 – 2017-03-17 05:33:35

+0

一直試圖找出一小時。謝謝。不知道爲什麼這沒有更多的選票。 – 2017-06-15 01:32:07

0

範圍!

scope :contains, ->(items) { where("products LIKE ?", "%#{items.to_yaml}%") } # items is an array of your potential strings 

所以你把這個作爲Box.contains(%w(foo bar))Box.contains(['some thing'])

傳遞數組應該讓你同時搜索多個項目...

您可以隨意命名範圍什麼,顯然

像MySQL的ILIKE PostgreSQL的

相關問題