1

シナリオ:

  • 主な Rails アプリケーション
  • メインの Rails アプリケーション (routes.rb) にマウントされたさまざまな Rails エンジン

ここで、「Engine」という名前のエンジンがあり、その中に「Topic」という名前のモデルがあるとします。何かのようなものEngine::Topic < ActiveRecord::Base

このエンジン内で、 のインスタンスのルートを生成する必要がある場合はTopic、次のようにします。

@topic = Engine::Topic.first

# inside helpers/views, i can write the below statement

url_for ([@topic]) 

# and it will give me exact "show" route for this topic. Like "/engine/topic/1"
# But this works only inside engines. If i write this inside main Application, 
# it gives an error "undefined method 'topic_path'"

これを一般化されたパターンにするにはどうすればよいですか?

(さまざまなエンジンからの) 任意のモデルの任意のオブジェクトを持つことができ、そのルートをクリーンな方法で見つけることができるということですか?

4

1 に答える 1

0

Rails エンジンのルートをマウントするときは、オプションで を渡すことができますas

# config/routes.rb
Rails.application.routes.draw do
  mount MyEngine::Engine => "/my_engine", as: "my_engine"
  get "/foo" => "foo#index"
end

これにより、たとえばエンジンのルートにアクセスするためにmy_engine使用できるルート ヘルパーが提供されます。my_engine.root_url

ソース: http://edgeapi.rubyonrails.org/classes/Rails/Engine.html

編集:

多分あなたはこのようなメタ的なことをすることができますか? :/

@topic.class.parent::Engine.routes.url_for(@topic)
于 2013-06-13T11:49:53.890 に答える