Discount.where(":user_id = ANY(user_id)", user_id: current_user.id)
Это должно сделать это для вас.Я предполагаю, что user_id
является полем массива в базе данных postgres.
Я бы порекомендовал вам также индексировать user_id
для большей производительности.Чтобы создать индекс для столбца массива, вы должны выбрать между GiST и GIN в качестве стратегий.Документация хорошо описывает опции, но, по сути, версия заключается в том, что поиск в GIN выполняется намного (в 3 раза) быстрее, но для сборки требуется больше времени (в 10 раз).Если ваши данные читаются гораздо чаще, чем пишутся, используйте GIN.
Ваша миграция может выглядеть примерно так:
create_table "discounts", force: :cascade do |t|
t.string "amount"
t.string "name"
t.string "from"
t.string "to"
t.integer "user_id", default: [], array: true
end
add_index :discounts, :user_id, using: 'gin'