我想减少我申请表中的路由,以便:

http://myapplication.com/users/peter/questions/how-do-i-create-urls

变成...

http://myapplication.com/peter/how-do-i-create-urls

我有一个用户控制器,希望它是足智多谋的.用户还有一个嵌套资源,名为"问题".

Basic routes file

没有任何URL修剪,路由文件如下所示:

...
resources :users do
  resources :questions
end

然而,来自该网站的URL采用

http://myapplication.com/users/peter/questions/how-do-i-create-urls

而不是

http://myapplication.com/peter/how-do-i-create-urls

Partial success

...
resources :users, :path => '' do
  resources :questions
end

这起作用并产生:

http://myapplication.com/peter/questions/how-do-i-create-urls

然而,如果我try :

...
resources :users, :path => '' do
  resources :questions, :path => ''
end

然后事情开始出问题.

这是正确的方法吗?如果是的话,是否也可以使用嵌套资源?

推荐答案

你这样做应该管用.我不知道你遇到了什么问题,但如果你直接从应用程序中复制了示例代码,那可能是因为你在路由中添加了额外的end个.它应该是这样的:

resource :users, :path => '' do
  resource :questions, :path => ''
end

另一个可能是原因,你需要注意的是,这些路由几乎能捕获所有请求,你应该让它们在你的路由中最后一个.rb,以便其他路由首先匹配.以这个场景为例:

resource :users, :path => '' do
  resource :questions, :path => ''
end

resources :posts

If you do it this way then no request will ever be routed to the Posts controller since a request to /posts/1 will be sent to the Questions controller with :user_id => 'posts', :id => 1

编辑:

另外,我现在注意到你使用资源而不是资源.不知道这是有意的还是错误的.

Ruby-on-rails相关问答推荐

如何在_serialize之前执行代码?""或者如何在序列化属性之前对属性进行清理?

在Ruby中按特定值合并时,将两个对象数组添加到一起

为什么 2 个关键字参数被解释为 1?

用变量替换 find_or_create_by 中的键

如何配置我的 Rails 应用程序(使用 Puma)以通过 HTTPS 提供服务?

微软安全链接在页面加载前解锁用户

这种使用on:的语法在 Ruby on Rails 中意味着什么?

Rails:序列化数据库中的对象?

NameError:未定义的局部变量或方法记录器

带有 Cucumber 和 rspec 的 BDD - 这什么时候是多余的?

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

在两个 DateTime 之间迭代,步长为一小时

Rails,设计认证,CSRF 问题

form_for 未定义的方法 `user_path'

我们如何在 Rails Mailer 中设置邮箱发件人的名称?

如何在 Ruby on Rails 的内存缓存存储中列出键?

Ruby 根据属性在数组中查找并返回对象

Rails 4,Capistrano 3.0.0,无法加载这样的文件 - 部署

错误:无法构建 gem 原生扩展 - 安装 mysql2 时出错

Rails 在 id 字段上重置种子的方法