Bạn có thể sử dụng các phương pháp trong ActiveRecord::Sanitization::ClassMethods.
Bạn phải cẩn thận một chút vì chúng được bảo vệ và do đó chỉ sẵn có cho các lớp con ActiveRecord::Base
.
Trong một lớp mô hình mà bạn có thể làm điều gì đó như:
class MyModel < ActiveRecord::Base
def bespoke_query(params)
query = sanitize_sql(['select * from somewhere where a = ?', params[:search]])
connection.execute(query)
end
end
Bạn có thể send
phương pháp này để thử nó ra trên giao diện điều khiển quá:
> MyModel.send(:sanitize_sql, ["Evening Officer ?", "'Dibble'"])
=> "Evening Officer '\\'Dibble\\''"
Tôi nghĩ 'query = sanitize_sql (' chọn * từ đâu đó a =? ', params [: search]) 'nên là' query = sanitize_sql ([' chọn * từ đâu đó a =? ', params [: search]]) ' – allthesignals
Đã chỉnh sửa. Cảm ơn. – Shadwell