engine便利
Getting Started with Engines — Ruby on Rails Guides
Railsエンジン入門 — Ruby on Rails Guides
使いやすくなった Rails 3.1 の Engine - passingloopの日記
Rails::Engine
エンジンは便利なのだが、modelだけじゃなくて、controller/viewまでengine化すると、結構はまるところがでてくる。
routing
hoge/engine/routes.rb
1 Hoge::Engine.routes.draw do
2 resources :fuga
...
エンジン側に↑のようなroutingがあり
u/app/routes.rb
1 Rails.application.routes.draw do
2
3 mount Hoge::Engine, at: "/"
...
アプリケーション側で↑のようにroutes.rb
に書くと、
$ rake routes
Routes for Hoge::Engine:
fuga POST /fuga(.:format) hoge/fuga#create
...
のように、Engine側で追加したroutingが、mountしたアプリ側にも生える。
_path が呼べない
原因はぶっちゃけよくわかってないけど、fuga_path
で呼び出そうとすると、うまく呼び出せない。
= link_to "ほげ", fuga_path # => undefined local variable or method
mount時にasで名前を付けてやる
こうなってしまったら、下記のように、asで名前を付けてやる。
u/app/routes.rb
1 Rails.application.routes.draw do
2
3 mount Hoge::Engine, at: "/", as: 'hoge'
...
_pathを呼び出すときも、名前付きで呼び出す
= link_to "ほげ", hoge.fuga_path
これで、Engine側で定義したroutingに対して、アプリ側からリンクを晴れる
参考
#277 Mountable Engines - RailsCasts
※ Qiitaに書くときに、もろもろコードを書き換えたので、記述ミスってたらすみません。