如下,程序不走if标签。想要实现type为空不走where语句,type为0,1,2时走my_type=#{type},type=3时走my_type为0,1
把判断语句中的=改成==
根据你提供的代码和描述,我猜测你的问题可能出在 SQL 语句拼接上。
在拼接 SQL 语句时,我们应该使用占位符(placeholder)来代替变量,然后将变量的值作为参数传递给 SQL 执行函数,以避免 SQL 注入等安全问题。在你的代码中,使用字符串拼接的方式将变量 type 直接嵌入 SQL 语句中,这个方法不仅容易出现语法错误,也存在 SQL 注入的风险。
另外,在 SQL 语句中,如果使用 = 进行比较时,需要使用单引号将字符类型的值括起来。因此,当 type 的值为 0、1 或 2 时,my_type=#{type} 应该改为 my_type='#{type}'。
以下是修改后的代码:
def my_query
type = params[:type]
cond = ""
args = []
if type.present?
if type.to_i == 3
cond = "AND my_type IN (0, 1)"
elsif type.to_i >= 0 and type.to_i <= 2
cond = "AND my_type=#{type}"
end
end
sql = "SELECT * FROM my_table WHERE 1=1 #{cond}"
@result = ActiveRecord::Base.connection.execute(sanitize_sql([sql, *args]))
end
回答整理自chatgpt,如果有帮助麻烦采纳一下,谢谢啦!