2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsでgenerator作り、テンプレートの中身を動的に変えたい時

Last updated at Posted at 2019-09-04

環境

  • Rails 6.0.0
  • ruby 2.6.4

はじめに

プライベートで作っていたやつで、generatorでファイルを作る時に、ファイルの中身とかファイル名を好きに変えたいなぁと思っていて、そういえば、deviseがそんな感じのことをやっていたのでコード見てみたら、該当の処理がそのまま使えそうだったのでやってみた

ref

generator作る

rails g generator sample_template

クラス名などを変更したいテンプレートを作る

# lib/generators/sample/templates/hoge.rb
class <%= @hogehoge %>Controller
  def hoge; end
end

generatorクラスに変更するような処理を入れる

# lib/generators/sample/sample_template_generator.rb
class SampleTemplateGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('templates', __dir__)

  def set_instances
    @hogehoge = name&.classify
  end

  def generate_file
    template "app/controllers/#{@hogehoge}_controller.rb",
             "#{@hogehoge}_controller.rb"
  end
end

実行する

うまく app/controllers/change/change_controller.rb に生成され、中身のクラス名が ChangeController に変わればOK

rails g sample_template change

注意点

なお、今回雑にsuperclassを NamedBase にして 引数を name で取得してみてるが、現場だとこのようなことをするとお叱りを受ける可能性が高い。というのも、deviseでは、Baseを継承して、引数にふさわしい命名を付けてUSAGEも正確にしているためだ。
なので、現場でこのコードを書くとPRは通らないので、参考程度のメモ書きだと思って下さい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?