【发布时间】:2016-10-09 02:40:49
【问题描述】:
我有一个带有一堆属性的对象,这些属性代表可搜索的模型属性,我想只使用设置的属性动态创建一个 sql 查询。我创建了下面的方法,但我相信它容易受到 sql 注入攻击。我做了一些研究并阅读了rails活动记录查询界面指南,但似乎where条件总是需要一个静态定义的字符串作为第一个参数。我还试图找到一种方法来清理我的方法生成的 sql 字符串,但似乎也没有一个好的方法可以做到这一点。
我怎样才能做得更好?我应该使用 where 条件还是只是以某种方式清理这个 sql 字符串?谢谢。
def query_string
to_return = ""
self.instance_values.symbolize_keys.each do |attr_name, attr_value|
if defined?(attr_value) and !attr_value.blank?
to_return << "#{attr_name} LIKE '%#{attr_value}%' and "
end
end
to_return.chomp(" and ")
end
【问题讨论】:
标签: ruby-on-rails postgresql rails-activerecord ruby-on-rails-5