我有一个搜索方法,它接受参数中的键值对,并通过LIKE查询搜索活动记录模型。但我无法让它发挥作用。它没有正确理解关键论点。
这就是我的方法:
def search(key,value)
where('? LIKE ?',key,"%#{value}%")
end
它触发的查询是('name' LIKE '%air%')
,而它应该触发(name LIKE '%air%')
有没有办法可以让它发挥作用?
答案 0 :(得分:4)
警告:@MKumar提出的解决方案非常危险。如果key
是用户输入的,则只允许SQL注入。
def search(key, value)
where("#{key} LIKE ?", "%#{value}%")
end
search("IS_ADMIN == 1 --", "")
糟糕!
更好的方法是使用Arel表。
def search(key, value)
column = Model.arel_table[key.to_sym] # index into the columns, via a symbol
where(column.matches("%#{value}%"))
end
这不能产生SQL注入。
答案 1 :(得分:0)
试试这个
def search(key,value)
where("#{key} LIKE ?","%#{value}%")
end