LoginSignup
12
13

More than 5 years have passed since last update.

[rails] engineのroutingをapplication側からpathで呼び出す

Posted at

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に書くときに、もろもろコードを書き換えたので、記述ミスってたらすみません。

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13