我得到一个错误


  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进行引用,因此也可以防止注入问题。

10-07 23:28