Jmohey
Jmohey

Reputation: 163

Rails where clause when something is stored as array

I am running rails 4.2, with a PG database.

I have an item stored in the database such as (model Item):

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

I would like to get the Item.where(:something.include? => "3")

Obviously this is not working - but how are you meant to do this in rails?

Upvotes: 5

Views: 1355

Answers (2)

Kruupös
Kruupös

Reputation: 5484

In addition to @potashin answer, there is a shorter way to do (see documentation) if you need to get Items on one element.

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

Upvotes: 2

potashin
potashin

Reputation: 44611

According to documentation, something like this should work:

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

Upvotes: 6

Related Questions