1

设想:

  • 一个主要的 Rails 应用程序
  • 各种 Rails 引擎,安装在主要 Rails 应用程序 (routes.rb)

现在假设我有一个名为“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 回答