我有一个名为ImplicitTest
的模型。它被称为有一个名为Test
的Ruby对象,它在Rails中打破了很多东西。
但是,我仍然希望将其作为RESTful资源公开为test
(例如/tests
,/test/1/edit
等等。此外,将控制器保持为TestsController
会很棒,尽管这不太重要。
我通过在routes.rb文件中使用简单的resources :tests
行来执行此操作,但这对于RESTful表单(例如<%= form_for @test ... >
- 失败了 - 这表明@test对象的类型为ImplciitTest ,并尝试查找不存在的implicit_test_path
。
我尝试添加form_for选项,但得出的结论是,为了使表单适用于new
和edit
操作,没有一种单一,统一的方式要求form_for()使用路径名查找的前缀不同。
所以我一直试图从路由方面解决问题。我可以在路线文件中添加一行,以便我:
我知道我正在离开Golden Path来做这件事,但是Rails并没有让我使用Test作为模型名称,但这是用户希望在此资源的URL中看到的名称,所以我是希望有简单的路由选项来实现这一点。
答案 0 :(得分:8)
您需要做的就是在路线上设置:path
选项:
resources :implicit_tests, :path => '/test'
您仍然会以这种方式使用标准implicit_tests_path
帮助程序,因此您的代码不必分散以更改URL方案。
答案 1 :(得分:1)
在看到coreyward的答案时,我偶然发现了一种更短但不太直观的方法来获得我需要的东西:
resources :tests, :as => "implicit_tests"
这些基本上是做同样的事情(考虑到我在评论中添加了额外的:controller
开关)?或者是首选?