Help us understand the problem. What is going on with this article?

既存DBから ActiveRecord::Attributesのattribute を雑に生成するスクリプト

More than 1 year has passed since last update.

Rails 5 から導入された ActiveRecord::Attributes では、レコードのカラムをRuby側のコードに明示して、デフォルト値や型変換などに役立てることができます。

class User < ApplicationRecord
  attribute :id, :integer
  attribute :name, :string
  attribute :email, :string
end

ですが、Rails 5 以前からアップデートしてきた場合には、当然、attribute は定義されていません。では、DB定義とにらめっこしながら、手打ちするしかないのでしょうか?

雑に生成するスクリプト

.connection のメソッドを使えば、テーブル名やカラム定義にアクセスできます。なので、こんなスクリプトを書けば良いでしょう。

# columns.rb
# bin/rails r columns.rb のように実行する

# コネクションを取得
conn = ApplicationRecord.connection

# 抽出したいテーブル名を書く
tables = %w[
  users
  products
]

# カラムの情報を出力する
tables.each do |t|
  puts t
  conn.columns(t).each do |c|
    puts "  attribute :#{c.name}, :#{c.sql_type_metadata.type}"
  end
end
tonluqclml
エムスリーでソフトウェアエンジニアしています。仕事ではRubyもScalaもPythonもBashもなんでもやる雑食系。 Twitter:https://twitter.com/doloopwhile 昔の個人ブログ:http://doloopwhile.hatenablog.com/ 勤務先ブログ: https://www.m3tech.blog/
http://doloopwhile.hatenablog.com/
m3dev
インターネット、最新IT技術を活用し日本・世界の医療を改善することを目指します
https://m3.recruitment.jp/engineer/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away