Предположим, что существует модель под названием «Пользователь». У этого есть атрибут: хобби.Как искать модель, используя массив в .where?
user = User.first
user.hobbies
=> ["Bowling", "Cooking", "Knitting"]
Если бы я хотел использовать. Где искал атрибут: hobbies, как бы я это сделал? Я использую PostgreSQL и
:hobbies, :text, array:true
User.where (хобби: "Все, что я ставлю здесь, строковый массив, хэш") бросает ошибку
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal:
Будет ли любой из них переводить на «WHERE hobbies IN (« Боулинг »,« Кулинария »,« Вязание »)? «Потому что это был бы оптимальный запрос. –
'COUNT' не сообщает вам длину массива, но он сообщает вам, сколько * рядов * происходит в сворачивании в сводном запросе. Вот почему это всегда дает вам 1: независимо от того, как долго массив, есть еще одна строка. Вероятно, вам понадобится 'array_length (hobbies, 1)'. Но я на самом деле не уверен, что вы пытаетесь сделать, чтобы я мог ошибиться. –
Причина, по которой вы не можете использовать 'IN', заключается в том, что' hobbies' не является строкой, а массивом строк. Поэтому вместо этого вы должны использовать операторы массива. '@>' означает, что «хобби» имеет все «Боулинг», «Кулинария» и «Вязание». '&&' означает, что у него есть хотя бы один из них. –