0

我已经使用 2 个脚手架构建了一个 Ruby on Rails 应用程序,生成名为帖子和评论的模型,这样一个帖子有_很多评论,每个评论都属于一个帖子。我的应用程序的主页“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

不幸的是,在上面的 routes.rb 片段中用 'foo/bar' 代替 'foo' 并没有完成工作。

有任何想法吗?感谢您的关注!

4

2 回答 2

0

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

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

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

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

有关更多信息,请参阅Rails Routing from the Outside:2.6 Controller Namespaces and Routing

于 2013-06-19T22:30:52.140 回答
0

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

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

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

That did the trick.

于 2013-06-26T22:56:47.443 回答