Настройка: Rails + Postgres.Как найти записи, где значение столбца = [заданный массив] в рельсах
У меня таблицу А с колоннами
id: int, name: string, address: string, s_array: varchar[], i_array: int[], created_at: datetime)
для строки, мне нужно, чтобы найти все строки, которые имеют одинаковые значения. В рельсах, то запрос будет выглядеть
row = A.find(1) # any random row
ignore_columns = %w[id created_at]
A.where(row.attributes.except(*ignore_columns))
Это работает, если мы не имеем столбца с типом массива. Как найти все записи, где значение = [данный массив]?
Редактировать: Чтобы быть ясным, я хочу передать несколько столбцов в where, где некоторые столбцы имеют тип массива. Для значений в ИНЕКЕ, я передаю хэш (row.attributes.except (* ignore_columns) является хэш)
Edit 2: Пример:
Допустим, у меня есть таблица запросов
Query(id: Int, name: String, terms: varchar[], filters: int[], city: string, created_at: datetime)
id = primary key/integer
terms = array of string
filters = array of integer (it is an enum and we can select multiple which is saved as array)
other fields = self explanatory
Пусть я следующие строки
(1, "query1", ["john"], [0], "wall", <some_date>)
(1, "query2", ["eddard", "arya"], [0, 1], "Winterfell", <some_date>)
(1, "query3", ["sansa", "arya"], [1, 2], "Winterfell", <some_date>)
Теперь, когда я добавить новую строку
row = ActiveRecord of (1, "query4", ["eddard", "arya"], [0, 1], "Winterfell", <some_date>)
Что я хочу искать уже существующие записи, как этот
ignore_attributes = %w[id name created_at]
Query.where(row.attributes.except(*ignore_attributes))
Этот запрос должен возвращать уже существующий query3, так что мне не нужно, чтобы добавить новую строку с именем query4.
Проблема в том, что некоторые типы столбцов имеют тип массива, а затем передают их как хэш/условия в том, что предложение не работает.
какие столбцы вам нужно игнорировать, прежде чем вы проверите и удалите запрос вставки.? – Milind
Те, что указаны в массиве ignore_attributes. – chinmayv