モデルにスコープがあります:
scope :assigned_to_user, ->(user) {
task_table = UserTask.table_name
joins("INNER JOIN #{task_table}
ON #{task_table}.user_id = #{user.id}
AND (#{task_table}.type_id = #{table_name}.type_id)
AND (#{task_table}.manager_id = #{table_name}.manager_id)
")
}
したがって、breakman レポートを実行すると、次の警告が表示されます。
assigned_to_user | SQL Injection | Possible
だから私は次のことを試しました:
scope :assigned_to_user, ->(user) {
task_table = UserTask.table_name
joins(ActiveRecord::Base::sanitize("INNER JOIN #{task_table}
ON #{task_table}.user_id = #{user.id}
AND (#{task_table}.type_id = #{table_name}.type_id)
AND (#{task_table}.manager_id = #{table_name}.manager_id)
"))
}
'
SQLの前後に(アポストロフィ)を追加するため、これはうまくいきません。したがって、これをいくつかの結果を返すクエリの一部として使用し、このスコープを適用すると、間違った SQL が生成されます。
私もこれを試しました:
scope :assigned_to_user, ->(user) {
task_table = UserTask.table_name
joins("INNER JOIN #{task_table}
ON #{task_table}.user_id = ?
AND (#{task_table}.type_id = #{table_name}.type_id)
AND (#{task_table}.manager_id = #{table_name}.manager_id)
", user.id)
}
ステートメントも作成しません。そして、機能せず、言及する価値さえない他のいくつかのものを試しました。これを修正する方法を知っている人はいますか?