我试图通过用我的连接参数替换来避免任何 SQL 注入漏洞。
Category.joins("LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", params[:Dept])
这尝试执行带有问号的查询,而不是用它替换参数。执行此操作的正确方法是什么?
EDIT:
查询需要返回这个:
SELECT categories.*
FROM "categories"
LEFT OUTER JOIN incomes
ON incomes.category_id = categories.id AND incomes.dept_id = 86
not
SELECT categories.*
FROM "categories"
LEFT OUTER JOIN incomes
ON incomes.category_id = categories.id
WHERE incomes.dept_id = 86
结果截然不同!
一种选择是使用清理sql数组方法。然而,它是一种受保护的方法,因此在您的类别模型上您可以执行以下操作:
class Category < ActiveRecord::Base
def self.income_for_dept(dept)
Category.joins(sanitize_sql_array(["LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", dept]))
end
end
然后你会这样称呼它:
Category.income_for_dept(params[:Dept])
如果需要,Ruby 提供了一些其他方法来获取该方法,而无需在 Category 中创建类方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)