2016-03-09 1 views
5

Я бегу рельсы 4.2, с базой данных PG.Rails where where, когда что-то хранится как массив

У меня есть элемент хранится в базе данных, таких как (модель Item):

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

Я хотел бы получить Item.where(:something.include? => "3")

Очевидно, что это не работает - но как вы имели в виду, чтобы сделать это в рельсах?

ответ

6

По documentation, что-то, как это должно работать:

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

В соответствии с документом существует более короткий метод использования, когда мы ищем только один элемент. 'Item.where (" '3' = ANY (что-то) ")' Я достаточно зациклен там не проще, чтобы активировать этот способ активации! –

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