【问题标题】:How to create a Rails mountable engine that is the root application itself?如何创建作为根应用程序本身的 Rails 可挂载引擎?
【发布时间】:2014-01-08 12:51:49
【问题描述】:
我正在创建一个Blog 可挂载引擎,人们将把它用作他们的完整应用程序。
如果当前有人将我的 gem 添加到他们的 Rails 应用程序中,它将在他们网站的 /blog url 下工作(因为引擎是命名空间的)。
如何让他们只使用 gem 作为他们的整个应用程序?
即他们在 gem 文件中包含 gem "Blog",他们的 http://example.com/ 显示 gem 提供的应用程序。
任何帮助将不胜感激。
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-4
rails-engines
【解决方案1】:
原来是最简单的事情。所需要的只是路线中的这个:
mount Blog::Engine => "/"
【解决方案2】:
这对于routing concern(Rails 4 中新引入的)可能是一个很好的例子。它们的作用是允许您捆绑和重用一组路由。因此,对于一个非常简单的博客应用程序,您可能会拥有这样的东西:
concern :bloggable do
resources :articles do
resources :comments
end
end
所有特定于您的 gem 的路由都可以进入 bloggable 关注点。将其注入应用程序的默认方式如下所示:
scope :blog do
concerns :bloggable
end
这将提供您已经拥有的行为 - 所有与 blog/ 目录下的博客关联的路由。但是,这很容易让用户更改它。要按照您的建议将其放在根范围内,用户必须将 concerns :bloggable 添加到其路由文件的基本范围内,它将按预期工作。