2016-03-09 10 views
5

I am running rail 4.2, con un database PG.Rails where clause quando qualcosa è memorizzato come array

Ho un elemento memorizzato nel database come ad esempio (modello Item):

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

Vorrei ottenere il Item.where(:something.include? => "3")

Ovviamente questo non sta funzionando - ma come stai intendevo fare questo in rotaie?

risposta

6

Secondo documentation, qualcosa di simile a questo dovrebbe funzionare:

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

In base al documento, esiste un metodo più breve da utilizzare quando si cerca un solo elemento. 'Item.where (" '3' = QUALSIASI (qualcosa) ")' Sono abbastanza tranquillo non è più facile il metodo di activerecord per farlo! –

+0

@ MaxChrétien: Posso (o tu) includere il tuo commento nella risposta? Penso che possa essere considerato abbastanza utile. – potashin

+0

Commento rifiutato. _Questa modifica intendeva rivolgersi all'autore del post e non ha senso come modifica. Dovrebbe essere stato scritto come commento o risposta._ –

2

Oltre a @potashin risposta, c'è un modo più breve per fare (vedi documentation) se avete bisogno di ottenere prodotti che su un elemento .

# 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'])