Ruby on rails 为rails中的单一名称控制器和模型定义资源的正确方法?

Ruby on rails 为rails中的单一名称控制器和模型定义资源的正确方法?,ruby-on-rails,Ruby On Rails,如果我有articles controller和article model,我将创建资源:config/routes.rb中的articles 但假设我有一个单一的控制器,我想用于控制面板,比如control_panel_controller.rb,而不是control_panels_controller.rb,以及一个与该控制器control_panel.rb匹配的模型。我会使用资源:control_panel作为合适的ruby约定,还是我必须用其他方法来实现它?您可以指定单一的路由并覆盖预期

如果我有articles controller和article model,我将创建资源:config/routes.rb中的articles


但假设我有一个单一的控制器,我想用于控制面板,比如control_panel_controller.rb,而不是control_panels_controller.rb,以及一个与该控制器control_panel.rb匹配的模型。我会使用资源:control_panel作为合适的ruby约定,还是我必须用其他方法来实现它?

您可以指定单一的路由并覆盖预期的默认控制器名称

以下是我如何设置我的主页:

resource :home, only: [:show], controller: 'home'

class HomeController < ApplicationController
...
end
这将提供一个名为“home\u path”的助手,该助手生成“/home”URL

请看一下轨道布线指南;它确实涵盖了这些选项,但它们并不十分明显


编辑:顺便说一句,您的模型名称完全独立于控制器/路由。当然,这是一个很好的惯例,让他们尽可能匹配,但通常情况下,随着应用程序的增长,会有许多模型或服务对象与具有CRUD操作的控制器不直接对应。

因此,如果我有一个picture.rb模型,并希望在路由中将其链接到control_panel_controller.rb,我只需执行以下操作:pictures,controller:“control_panel”?如我所说,模型完全独立于路由和控制器。路由文件不链接它们。如果你说“资源:东西”,它将生成url帮助程序,比如东西路径、东西路径、编辑东西路径等等;然后把它们送到东西控制者那里。但在ThingsController中,您可以选择查询任何您想要的模型。哦,好的。在我的例子中,它将是resources:control_panel我认为即使对于单数资源(由'resource'定义,没有尾随的's'-Rails约定),也期望控制器仍然具有复数名称。这就是为什么可以在资源定义中使用:controller选项来覆盖控制器名称。在我的例子中,如果我遗漏了这个选项,它会寻找“s”。