ActiveRecord-当字段是序列化的空数组时,#where方法



我有一个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中的预期行为还是一个bug吗?

这不是一个错误,5.2.2更新以删除SQL注入问题

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

如果您观察到这个查询,我们会遇到SQL注入问题,也就是说,如果您传递一些查询而不是值,那么它就会传递。太危险了。您可以使用的以下代码来检索基于where条件的数组对象的数据。

ModelName.where('users IN (?)', [array of elements] )