单引号或复数控制器和助手名称在Rails中

控制器和助手使用单数名称有什么缺点吗? 似乎没有任何依靠这个。 甚至似乎帮助者不必就单数对复数作为他们相应的控制者作出同样的select,至less根据我有限的实验。 真的吗?

绝对是复数

安静的路由和一个单一的控制器

控制器:

dog_controller.rb 

路线:

 map.resources :dogs # => blows up map.resources :dog # is ok, but... dogs_path # => blows up dog_path # => ok 

使用复数控制器

控制器:

 dogs_controller.rb 

路线:

 map.resources :dogs dogs_path # => ok dog_path # => ok 

rails generate controller --help有奇异的例子。 啊。

对控制器使用复数名称只是一个惯例。

复数名称通常听起来更自然(特别是对于直接绑定到特定模型的控制器:用户 – >用户等),但是您可以使用任何您想要的。

至于助手,所有助手都默认可用于所有的控制器,所以在技术上,你如何命名你的助手并不重要。 将控制器的辅助函数保存在与控制器同名的助手中是另一个约定。

模型是单数的,因为它引用了像User这样的单个对象。 控制器是复数,因为它是收集用户的控件(方法)。 如何命名路线取决于个人开发者。 我从来没有一个用户抱怨networking请求的URL是单数或复数。 最终结果是为当前和未来的贡献者维护一个共同的约定,同时为最终用户提供高质量的页面显示或API请求。

在Rails指南中有一个非常完整的解释: http : //edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default

一个控制器处理一个模型是Rails约定,运行时是否可以存在该模型的一个或多个实例。 然而,你可以有一个Rails应用程序,其中(某些)控制器(和相关的视图)不与任何特定的模型相关联,而是处理更复杂的一组function。 在这种情况下,自动多元化没有任何意义。

我目前正在使用的Rails应用程序符合这个类别,这对我来说简直是一种激怒,Rails期望在一个地方我定义为单数的标识符在其他地方以复数forms使用。 例如,我可能想要在config/routes.rb定义这样的东西:

  resource :dashboard, :only => [:show] 

然后我想要一个控制器DashboardController显示有关应用程序的某些方面的摘要信息,从多个数据库表中收集信息。 因此,在这里, Dashboard不会引用任何应用程序的模型,并且将控制器的名称设置为DashboardsController会很奇怪。

在这个答案中,我发现了一个很好的解决办法,让自动多元化的烦恼。 简而言之,编辑文件config/initializers/inflections.rb并添加你不想被自动复制的词语到这个定义:

 ActiveSupport::Inflector.inflections do |inflect| inflect.uncountable %w( dashboard foo bar baz ) end 

当我使用单数的控制器名称时,感觉更好

如果控制器是一个资源,那么它必须是复数…

例如

调节器

 articles_controller.rb 

模型

 article.rb 

但是,如果没有相应的模型,则可以使用单个控制器名称

 welcome_controller.rb 

Rails中控制器的命名约定有利于控制器名称中的最后一个字的复数forms ,尽pipe它不是严格要求的 (例如ApplicationController )。

例如, ClientsController优于ClientControllerSiteAdminsControllerSiteAdminControlleSitesAdminsController ,依此类推。

按照这个约定,您可以使用默认的路由生成器(例如资源等),而不需要限定每个:path:controller ,并在整个应用程序中保持URL和path帮助器的使用一致。

参考: 控制器命名公约 – Rails文件

使用复数只是听起来更好,然后如果你有一个控制器处理单一的资源,即用户,那么你仍然可以命名的url/用户。

使用助手通常不需要为每个控制器都提供一个助手,而且通常会有助手方法,可以使用ascorss多个控制器,而通过应用程序帮助程序将所有这些方法废弃,您可以将它们放在自定义助手中,例如layout_helper或任何其他有名的文件。