【问题标题】:Ruby on Rails - prefixing the application URLRuby on Rails - 为应用程序 URL 添加前缀
【发布时间】:2013-06-19 22:24:12
【问题描述】:

我使用 2 个脚手架构建了一个 Ruby on Rails 应用程序,生成名为帖子和 cmets 的模型,这样一个帖子就有_many cmets 并且每个评论都属于一个帖子。我的应用程序的主页“posts#index”可以在浏览器的 URL 中访问

本地主机:3000/帖子

评论是帖子的嵌套资源:

resources :posts do
    resources :comments
end

我想更改我的 routes.rb 以便访问我的应用程序 localhost:3000/foo/bar/posts

到目前为止,我已经成功完成了一半的任务,但我找不到完成它的信息。我发现我可以通过 localhost:3000/foo/posts 访问我的应用程序:

scope :path => 'foo' do
   resources :posts do
      resources :comments
   end

   resources :comments
end

在上述路线中用 'foo/bar' 代替 'foo'。不幸的是,rb sn-p 并没有完成工作。

有什么想法吗?感谢收看!

【问题讨论】:

  • 我正在寻找一个简单的解决方法。也许 routes.rb 中的几行可以完成这个 url 更改。 rails 安装是典型的,我想尽量减少对其他文件的更改。

标签: ruby-on-rails ruby url scope routes


【解决方案1】:

如果您希望将所有内容都放在子目录中,请在您的 config/application.rb 文件中设置 config.action_controller.relative_url_root = '/foo'。如果您要部署到有乘客的服务器上的子目录,就会发生这种情况。

如果只是典型 Rails 部署中的几件事,那么您想要使用命名空间。例如,如果你把它放在你的routes.rb:

namespace :foo do
  namespace :bar do
    resources :posts
  end
end

然后,您将在 app/controllers/foo/bar//posts_controller.rb 中创建一个 Foo::Bar::PostsController。 Foo::Bar::PostsController 的索引操作可以从/foo/bar/posts 访问。

请参阅Rails Routing from the Outside in: 2.6 Controller Namespaces and Routing 了解更多信息。

【讨论】:

  • Admin::PostsController 中的内容是什么?
  • 我要做的是使 URL localhost:3000/foo/bar/posts。我现在拥有的是 localhost:3000/foo/posts。
  • @user1489878 我已经更新了答案以使其更加清晰。
  • 我做了哪些修改来适应命名空间解决方案?在我的 app/controllers/ 中创建目录 /foo/bar/ 并将 posts 控制器复制到该目录?
【解决方案2】:

我真的在寻找一个简单的解决方案——我可以在不对我必须跟踪的 rails 应用程序进行微小更改的情况下做到这一点。

我最终做的是在 routes.rb 文件中手动重新路由,例如

get '/foo/bar/posts' as 'posts#index'

成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2011-05-15
    • 2017-12-09
    相关资源
    最近更新 更多