動かざることバグの如し

近づきたいよ 君の理想に

Railsでrakeタスク上からviewを生成(render)する方法

環境

やりたいこと

railsのtasksからActionViewを参照してHTMLを生成(render)して出力したい

ここでいうrenderがややこしいのだが、よくControllerの中で使っているrender json: {key: 1}などとは違う

もっと言うと普段使っているrenderの内部で更にActionViewのrenderを呼び出している

コード

さっさと動くコード見せろって話

view_paths = Rails::Application::Configuration.new(Rails.root).paths["app/views"]
v = ActionView::Base.new(view_paths)
puts v.render(file: "posts/index.html.erb")

難しいことは指定なくてこれで app/views/posts/index.html.erb にあるHTMLが表示される

変数渡したい

v.assign(name: 'taro')

何度も言うけど、ここのrednerは普段コントローラーで使っているrenderとは違うので、変数をそのまま渡せない。強いて言うならViewの中で使っているrender :partialに近い(というか同じだと思う

参考リンク