对控制器和助手使用单数名称有什么不利吗?似乎没有什么依赖于此.它甚至看起来帮助者不必像对应的控制器那样对单数与复数做出相同的选择,至少根据我的有限实验.真的吗?
绝对是复数.
控制器:
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
有多个例子:
Example: `rails generate controller CreditCards open debit credit close` CreditCards controller with URLs like /credit_cards/debit. Controller: app/controllers/credit_cards_controller.rb Test: test/controllers/credit_cards_controller_test.rb Views: app/views/credit_cards/debit.html.erb [...] Helper: app/helpers/credit_cards_helper.rb
对控制器使用多个名称只是一种惯例.
多个名称通常听起来更自然(特别是对于直接绑定到特定模型的控制器:用户 - >用户等),但您可以使用任何您想要的.
对于助手,默认情况下所有助手都可以使用所有助手,因此从技术上讲,如何为助手命名并不重要.将控制器的辅助函数保存在与控制器同名的帮助程序中只是另一种约定.
模型是单数的,因为它引用了像User这样的单个对象.控制器是复数,因为它是用户集合的控件(方法).如何命名路线完全取决于该开发人员.我从未让用户抱怨网络请求的网址是单数或复数.最终结果是在为最终用户提供高质量页面显示或API请求时维护当前和未来贡献者的通用约定.
您在Rails指南中有一个非常完整的解释:http: //edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default
Rails约定是一个控制器处理一个模型,无论该模型的一个或多个实例是否可以在运行时存在.但是,您可以拥有一个Rails应用程序,其中(某些)控制器(和相关视图)不与任何特定模型相关联,而是处理更复杂的功能集.在这种情况下,自动复数没有任何意义.
我目前正在研究的Rails应用程序属于这一类,对我来说只是一种恼怒,Rails希望我在一个地方定义为单数的标识符然后在其他地方以复数形式使用.例如,我可能想要在以下内容中定义类似的内容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