如何在资源模型名称与路径或控制器不匹配时编写路由

Pha*_*ale 10 rest routing ruby-on-rails rails-routing

我有一个名为的模型ImplicitTest.它被称为有一个Ruby对象,Test只是在Rails中打破了很多东西.

但是,我仍然希望将其作为RESTful资源公开test(例如/tests,/test/1/edit依此类推).此外,保持控制器的效果会很好TestsController,尽管不那么重要.

我通过resources :tests在routes.rb文件中使用简单的行来实现这一点,但这对于RESTful表单来说是失败的(例如<%= form_for @test ... >- 这会发现@test对象的类型为ImplciitTest,并尝试查找implicit_test_path不存在的行.

我尝试添加form_for选项,但得出的结论是,为了使表单适用于两者newedit操作,没有一种单一,统一的方式要求form_for()使用不同的前缀进行路径名查找.

所以我一直试图从路由方面解决问题.有没有我可以添加到路径文件的行,这将允许我:

  1. 有一个名为ImplicitTest的模型
  2. 将路径作为/ test
  3. 仍然使用<%= form_for @test ...%>标记
  4. 将控制器保持为TestsController(可选)

我知道我正在离开Golden Path来做这件事,但Rails并没有让我使用Test作为模型名称,但这是用户希望在此资源的URL中看到的名称,所以我希望有是启用此功能的简单路由选项.

cor*_*ard 8

您需要做的就是:path在路线上设置选项:

resources :implicit_tests, :path => '/test'
Run Code Online (Sandbox Code Playgroud)

您仍然会以implicit_tests_path这种方式使用标准帮助程序,因此您的代码不必分散以更改URL方案.

  • 这似乎没有调整控制器名称,但将其调整为`resources:implicit_tests,:controller =>"tests",:path =>"tests"`似乎将其添加到. (2认同)