ActiveRecord - метод #where, когда поле является сериализованным пустым массивом - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть запрос ActiveRecord:

Post.where(users: [])

В Rails 5.1.1 это приводит к:

SELECT `posts`.* FROM `posts` WHERE (users = '[]')

, но в Rails 5.2.2 это приводит к:

SELECT `posts`.* FROM `posts` WHERE 1=0

Кто-нибудь знает, является ли это ожидаемым поведением в Rails 5.2 или ошибкой?

1 Ответ

0 голосов
/ 06 декабря 2018

Это не ошибка, 5.2.2 обновлено для удаления проблемы SQL-инъекции.

SELECT `posts`.* FROM `posts` WHERE (users = '[]') 

Если вы наблюдаете этот запрос, у нас есть проблема SQL-инъекции, то есть если выпередать некоторый запрос вместо значения, тогда он пройдет.Это слишком опасно.Вы можете использовать приведенный ниже код для извлечения данных на основе объектов массива с условием where.

ModelName.where('users IN (?)', [array of elements] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...