rails engine のハマりどころ

仕事で使えそうなツール作りが日課になりつつあって最新作はrails engineで作った。
rails engineというのを初めて使ったのでちょっとハマった。

rails engine側がrailsアプリのlayoutテンプレートを参照してしまう

rails_engine/application.html.erb を参照して欲しいのに、application.html.erb を 参照してる。
原因はcontrollerの継承先にネームスペースがついていなかったことだった。

> - SugoiHttpTesterRails::ProjectsController < ApplicationController
> + SugoiHttpTesterRails::ProjectsController < SugoiHttpTesterRails::ApplicationController

ヘッダーとフッターに本体のテキストを表示したい

本体とengineは分離する構造なのでビューを混ぜるのはできなさそう。(engine側のnamed routesは呼べる)
engine部分は iframe で表示することにした。engineを使っているgemだとそれがよくある実装らしい。

<div style='height: 800px'>
  <iframe width='100%' height='100%' src="/_http_tester"></iframe>
</div>
# config/http_tester
  mount SugoiHttpTesterRails::Engine => "/_http_tester", as: :http_tester
  get 'http_tester' => 'http_tester#index'

感想

iframe微妙

http://railsguides.jp/engines.html

https://github.com/jiikko/sugoi_http_tester_rails