ActiveRecord::Base.connection
có quote
phương thức nhận giá trị chuỗi (và tùy chọn đối tượng cột). Vì vậy, bạn có thể nói điều này:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
Lưu ý nếu bạn đang di chuyển Rails hoặc đối tượng ActiveRecord, bạn có thể rút ngắn nó thành:
connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{connection.quote(baz)}
EOQ
CẬP NHẬT: Như @kolen đã chỉ ra, bạn nên sử dụng exec_update
thay thế. Điều này sẽ xử lý việc trích dẫn cho bạn và cũng tránh rò rỉ bộ nhớ. Tuy nhiên, chữ ký hoạt động hơi khác một chút:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
Ở đây tham số cuối cùng là một mảng các bộ giá trị đại diện cho các tham số ràng buộc. Trong mỗi bộ, mục nhập đầu tiên là loại cột và mục nhập thứ hai là giá trị. Bạn có thể cung cấp nil
cho loại cột và Rails thường sẽ làm đúng.
Ngoài ra còn có exec_query
, exec_insert
và exec_delete
, tùy thuộc vào những gì bạn cần.