2016-03-09 30 views
5

我使用PG數據庫運行rails 4.2。Rails where子句將數據存儲爲數組

我已經存儲在數據庫中的項目,如(型號Item):

:something => ["1", "2", "3"] 

我想獲得Item.where(:something.include? => "3")

顯然,這是行不通的 - 但你怎麼意思做這在鐵軌?

回答

6

documentation,這樣的事情應該工作:

Item.where('something @> ARRAY[?]::varchar[]', ['3']) 
+0

根據文檔,當我們只查找一個元素時,有一個較短的方法來使用。 'Item.where(「'3'= ANY(something)」)' 我相當窒息,沒有更簡單的activerecord的方法來做到這一點! –

+0

@MaxChrétien:我可以(或您)在回答中包含您的評論嗎?我認爲這可以被認爲是相當有用的。 – potashin

+0

評論被拒絕。 _此編輯旨在解決該帖子的作者,作爲編輯沒有意義。它應該被寫爲評論或答案._ –

2

除了@potashin答案,有一個較短的方式做(見documentation)如果你需要得到一個元素上的項目。

# Items for a single something 
    Item.where("'3' = ANY (something)") 
    # Or using '?' 
    Item.where('? = ANY (something)', '3') 

# Items for multiple something 
    Item.where('something @> ARRAY[?]::varchar[]', ['3', '4'])