我有一个DashboardController
。这是用户查看其个人资料、设置等的页面。
对我来说,仪表板是单一的,这是有意义的。
目前,仪表板也是根。只要用户登录,用户就可以访问他们的仪表板。一个用户可以有多个children
,所以我添加了一个向控制器添加子项的操作。
我已经定义了路线,因此:
resource :dashboard, only: [:show], path: 'dashboard' do
post :create_child, on: :collection
end
resolve("Dashboard") { [:dashboard] }
root "dashboard#show"
根显示为单数,但到控制器的路径是复数,嵌套路由也是如此。
create_child_dashboard POST /dashboard/create_child(.:format) dashboards#create_child
dashboard GET /dashboard(.:format) dashboards#show
root GET / dashboard#show
我希望 URL 是单数。如何确保这一点?
这实际上正是它应该的样子。Rails不区分普通资源或单数资源的控制器命名。它们始终是复数。
虽然你可能不同意这一点,但对所有控制器使用单一命名约定会更简单。我强烈建议你在将自己的想法强加于它们之前先学习这些约定。
话虽如此,但“仪表板”是否真的是一种资源还是一个值得商榷的问题。您实际上并没有创建或更新它,它实际上只是作为一组松散相关路线的启动页面和分组。您实际上应该将它定义为范围或命名空间(如果您还想要模块嵌套)。
除此之外,您实际上并没有定义嵌套资源,而只是创建了非惯用路由。Rails 中的嵌套资源是通过 POST 到嵌套集合路径创建的 - 例如:
后面的例子是具有单一父资源 - 它暗示用户是当前用户(这也使得嵌套有点多余)。
如果您在 Rails 路由路径中添加
create_
或update_
类似动词,则您做错了。控制器不应同时负责资源及其子资源。因此,我会选择类似这样的方法: