我得到一个错误
Mysql2 :: Error:您的SQL语法有错误;查看手册
对应于您的MySQL服务器版本的正确语法,
在'%booked%附近使用)
我该如何解决?
模型
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)
最佳答案
SQL的LIKE
运算符两端都带有字符串,因此您要生成的SQL是:
LOWER(reservations.message) LIKE '%booked%'
即
%booked%
用单引号引起来。最简单的方法是在您的范围内使用占位符:scope :with_type, ->(type) { where('LOWER(reservations.message) LIKE ?', "%#{type}%") }
这会将字符串插值放入Ruby中,并将该字符串交给
where
进行引用,因此也可以防止注入问题。