【问题标题】:Rails search all columns of db for value without explicitly naming themRails 在 db 的所有列中搜索值而不显式命名它们
【发布时间】:2016-10-24 03:55:59
【问题描述】:

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

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

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

有没有办法只在表的所有列中搜索一个值。所以是这样的:

MyModel.search_all_columns(search[:search_key])

所以基本上角度过滤器的作用。

【问题讨论】:

  • 没有内置的解决方案。
  • 这看起来像全文搜索。为此有专门的快速引擎。

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


【解决方案1】:
MyModel.where do
  MyModel.columns.map do |col|
    col.matches("%#{search[:search_key]}%")
  end.reduce :|
end

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多