Sql 使用带有连接的占位符
我试图通过在连接上使用参数替换来避免任何SQL注入漏洞Sql 使用带有连接的占位符,sql,ruby-on-rails,ruby,join,Sql,Ruby On Rails,Ruby,Join,我试图通过在连接上使用参数替换来避免任何SQL注入漏洞 Category.joins("LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", params[:Dept]) 这将尝试执行带有问号的查询,而不是将其替换为参数。正确的方法是什么 编辑: 查询需要返回以下内容: SELECT categories.* FROM "categories" LEFT OUTER
Category.joins("LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", params[:Dept])
这将尝试执行带有问号的查询,而不是将其替换为参数。正确的方法是什么
编辑:
查询需要返回以下内容:
SELECT categories.*
FROM "categories"
LEFT OUTER JOIN incomes
ON incomes.category_id = categories.id AND incomes.dept_id = 86
不是
非常不同的结果 试试看
Category.joins(:incomes).where(:incomes => { :dept_id => params[:Dept] })
并查看。一个选项是使用该方法。但是,它是一种受保护的方法,因此在您的类别模型上,您可以执行以下操作:
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
如果需要的话,Ruby提供了一些其他方法来获取该方法,而无需在Category中创建class方法。谢谢,但这不符合我的查询标准。这将在where子句上放置一个条件,而不是在join上。我需要返回所有类别,无论是否有匹配。我需要它专门按照
和incomers.dept\u id
进行过滤,否则这个查询就不起作用了。这正是我要找的。非常感谢。
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])