rails generate scaffold で生成した view が migration によるテーブルのカラムの変更に追随してなかったから更新しましょうということになったのですが、量がそれなりにあって手作業でやると面倒なので rails generate しなおしたのから切り貼りしたらいいじゃない、と思って調べてみたのですが、どうもそういうのがみつからなかったのでこんなふうにしてみました。ちなみに rails generate view というような view だけ作るのはないんですね。
model, = ARGV script = <<-END attrs = #{model}.columns.map{|col| [ col.name, col.type ] } system("bundle exec rails generate scaffold #{model} \#{attrs.map{|field, type| "\#{field}:\#{type}" }.join(" ")} -f") system("git checkout -- app/models app/controllers app/assets db/migrate config/routes.rb spec/") system("git clean -f db/migrate") END system("bundle exec rails runner '#{script}'")
こんなふうにモデルのクラス名を指定して使います。
% ruby regenerate_view.rb FooModel
一応解説しておくと rails runner を使って既存の ActiveRecord のモデルからカラム情報を取り出して rails generate scaffold に渡すフィールド情報の引数を作って、rails generate scaffold してから view 以外のところを元に戻してます。あとは差分をみながら必要なところは残しつつうまいことやります。
絶対こういうの誰かやってると思うんですけど、みあたらないということはなにかすごく筋の悪いことをしているんじゃないかなーと思う Rails はじめて 2ヶ月の新米 Rails プログラマです。