2017-12-02 3 views
0

が、私はエラーを取得するレールMySQLエラーが

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%booked%)

どのように私はこの問題を解決することができますか?

LOWER(reservations.message) LIKE '%booked%' 

すなわち:あなたが生成したいSQLがあるので

モデル

scope :with_type, lambda { |type| 
    where("LOWER(reservations.message) LIKE %#{type}%") 
} 

サーバー

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) 

答えて

2

上のSQL文をSQLのLIKEオペレータは、両側の文字列を取ります%booked%(シングルq) uotes。

scope :with_type, ->(type) { where('LOWER(reservations.message) LIKE ?', "%#{type}%") } 

あなたも注入の問題から保護されているので、それを引用するwhereにRubyや手にその文字列を文字列補間を置く:それを行うための最も簡単な方法は、あなたのスコープ内のプレースホルダを使用することです。

+0

ありがとうございます! – John