Rails动态属性在哪里LIKE子句

时间:2016-06-13 09:02:33

标签: ruby-on-rails activerecord

我有一个搜索方法,它接受参数中的键值对,并通过LIKE查询搜索活动记录模型。但我无法让它发挥作用。它没有正确理解关键论点。

这就是我的方法:

def search(key,value)
  where('? LIKE ?',key,"%#{value}%")
end

它触发的查询是('name' LIKE '%air%'),而它应该触发(name LIKE '%air%')

有没有办法可以让它发挥作用?

2 个答案:

答案 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