Posted at

Rails Generatorのtemplateで変数を利用する


やりたいこと

こんなtemplateがあったとします

<%= mtd %>

<%= @varialbe %>

この変数をgeneratorで定義したいのだけど、どうやればいいのかわからない


結果

Thor::Action#templateでErb.new().result(binding)を呼んでいました。

そのため、generatorのオブジェクトで定義をするだけで良さそうです


やり方

publicメソッドはジェネレータを実行時に呼び出されてしまうのでprivateにします

class HogehogeGenerator < Rails::Generators::NamedBase

source_root File.expand_path('templates', __dir__)

def add
@variable = "変数だよ"
template("src.erb", "dest")
end

private

def mtd
"methodだよ"
end
end

結果

$ bundle exec rails g hogehoge hoge

Running via Spring preloader in process 49225
create dest
$ cat dest
methodだよ
変数だよ