Rails搜索db的所有列以获取值,而不显式命名它们

时间:2016-06-22 09:37:19

标签: mysql sql ruby-on-rails ruby search

如果我想在一组列中搜索值,那么我可以这样做:

MyModel.where do
 col1.matches("%#{search[:search_key]}%") | col2.matches("%#{search[:search_key]}%") | ...
end

但是当我想搜索表的所有列时,没有必要在我的查询中明确地命名它们吗?因为否则每次我向数据库添加一列时,我都必须将它添加到我的搜索查询中。

有没有办法只搜索表的所有列中的值。所以像这样:

MyModel.search_all_columns(search[:search_key])

基本上是什么角度滤波器。

1 个答案:

答案 0 :(得分:0)

MyModel.where do
  MyModel.columns.map do |col|
    col.matches("%#{search[:search_key]}%")
  end.reduce :|
end

或使用ActiveRecord::Base#column_names构建查询。