rails5ではrender methodをいたるところで使えるようになっている
rails5にアップデートするときに変更されていて、手を加えて変更したので、備忘録として書いておきます。
rails4.2時代のrenderのやり方
下記のように、requestを強引に擬似るような形でやっていました。
class Renderer def renderer controller = ApplicationController.new controller.request = ActionDispatch::TestRequest.new ViewRenderer.new(Rails.root.join('app', 'views'), {}, controller) end end class ViewRenderer < ActionView::Base include Rails.application.routes.url_helpers include ApplicationHelper def default_url_options { host: Rails.application.routes.default_url_options[:host] } end end Renderer.new.render
こういうやり方ではなく、ActionController::Renderer
というクラスメソッドが作られました。
コントローラのアクションの外部で任意のテンプレートでレンダリングするActionController::Rendererを追加。 (Pull Request)
rails/rendering.rb at master · rails/rails · GitHub
ということで、下記のようにすることでrenderをいたるところで呼べるようになりました。
ApplicationController.renderer.render partial: 'topics/image', locals: { url: url, host_name: host_name }
以上です。