我收到错误
Mysql2 ::错误:您的SQL语法中有错误;检查手册 对应于您的MySQL服务器版本,以获得正确的语法 在“%预订%”附近使用
我该如何解决这个问题?
模型
scope :with_type, lambda { |type|
where("LOWER(reservations.message) LIKE %#{type}%")
}
服务器上的Sql语句
SELECT `reservations`.*
FROM `reservations`
LEFT OUTER JOIN `users` ON `users`.`id` = `reservations`.`from_id`
WHERE (`users`.`access_level_id` != 1)
AND `reservations`.`id_to` IS NULL
AND (LOWER(reservations.message) LIKE %booked%)
ORDER BY reservations.created_at desc LIMIT 10 OFFSET 0)
答案 0 :(得分:2)
SQL LIKE
运算符双方都使用字符串,因此您要生成的SQL是:
LOWER(reservations.message) LIKE '%booked%'
即。单引号%booked%
。最简单的方法是在您的范围内使用占位符:
scope :with_type, ->(type) { where('LOWER(reservations.message) LIKE ?', "%#{type}%") }
将字符串插值放在Ruby中并将该字符串传递给where
以引用它,这样您也可以防止注入问题。