

全てのテーブルを対象にカラムでgrepしたいとき、どうしていますか？


CC BY-SA 3.0
2017-07-03T11:23:25.727
36069
2017-07-13T01:15:22.537
12896
question
ruby-on-rails
rails でテーブルのカラム名を grep したい


  1. db/schema.rb に全てのtable定義があるので、そのファイルをgrep
  2. 直接DBにいって各RDBMS実装に応じたやりかたでgrep

思い付くのはこれぐらいですね。


CC BY-SA 3.0
2017-07-08T17:27:59.273
36203
2017-07-08T17:27:59.273
22745
36069
answer


用途がよく分からないので外しているかもですが、ActiveRecord を使っていて Ruby のコードで書くということなら以下の感じですかね？

[code]

    all_col_names = Hash.new {|h, k| h[k] = []}
    ActiveRecord::Base.connection.tables.each do |table|
      next if table.match(/\Aschema_migrations\Z/)
      next if table.match(/\Aar_internal_metadata\Z/)
      klass = table.singularize.camelize.constantize
      klass.column_names.each do|column_name|
        all_col_names[column_name] << table
      end
    end
    
    all_col_names['title'] # title カラムを持つテーブルの Array が取得できる
    
[/code]

Rails 5.1.2 + sqlite3 で確認しました。


CC BY-SA 3.0
2017-07-13T01:15:22.537
36305
2017-07-13T01:15:22.537
4695
36069
answer