Ruby on rails Rails中的控制器和助手名称的单数或复数形式
控制器和助手使用单数名称是否有任何缺点?似乎没有什么可以依赖于此。至少根据我有限的实验,助手们似乎不必像他们相应的控制器一样,对单数和复数做出相同的选择。这是真的吗?对控制器使用复数名称只是一种惯例 复数名称通常听起来更自然(特别是对于直接绑定到特定模型的控制器:User->Users等),但您可以使用任何您想要的名称Ruby on rails Rails中的控制器和助手名称的单数或复数形式,ruby-on-rails,naming-conventions,Ruby On Rails,Naming Conventions,控制器和助手使用单数名称是否有任何缺点?似乎没有什么可以依赖于此。至少根据我有限的实验,助手们似乎不必像他们相应的控制器一样,对单数和复数做出相同的选择。这是真的吗?对控制器使用复数名称只是一种惯例 复数名称通常听起来更自然(特别是对于直接绑定到特定模型的控制器:User->Users等),但您可以使用任何您想要的名称 至于助手,默认情况下所有控制器都可以使用所有助手,因此从技术上讲,如何命名助手根本不重要。这只是另一种约定,将控制器的助手函数保留在与控制器同名的助手中。使用复数听起来更好,如果
至于助手,默认情况下所有控制器都可以使用所有助手,因此从技术上讲,如何命名助手根本不重要。这只是另一种约定,将控制器的助手函数保留在与控制器同名的助手中。使用复数听起来更好,如果您有一个处理单个资源(即用户)的控制器,那么您仍然可以命名url/用户
对于助手,通常不需要为每个控制器配备助手,通常会有一些助手方法,您可以使用多个控制器,而不是通过应用程序助手将它们全部丢弃。您可以将它们放在自定义助手中,而不是像布局助手或任何其他命名良好的文件中。当我使用单数作为控制器名称时,我感觉更好。模型是单数的,因为它引用了像用户一样的单一对象。控制器是复数形式,因为它是用户集合的控件(方法)。如何命名路线完全取决于单个开发人员。我从未有用户抱怨web请求的URL是单数或复数。最终结果是在为最终用户提供高质量页面显示或API请求的同时,为当前和未来的贡献者维护一个通用约定。肯定复数 具有restful路由和奇异控制器 控制器:
dog_controller.rb
dogs_controller.rb
路线:
map.resources :dogs # => blows up
map.resources :dog # is ok, but...
dogs_path # => blows up
dog_path # => ok
map.resources :dogs
dogs_path # => ok
dog_path # => ok
使用复数控制器
控制器:
dog_controller.rb
dogs_controller.rb
路线:
map.resources :dogs # => blows up
map.resources :dog # is ok, but...
dogs_path # => blows up
dog_path # => ok
map.resources :dogs
dogs_path # => ok
dog_path # => ok
rails生成控制器--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
您在Rails指南中有一个非常完整的解释:
Rails的惯例是一个控制器处理一个模型,无论该模型的一个或多个实例在运行时是否存在。但是,您可以有一个Rails应用程序,其中(某些)控制器(以及关联的视图)不与任何特定模型关联,而是处理一组更复杂的功能。在这种情况下,自动多元化没有任何意义 我目前正在开发的Rails应用程序就属于这一类,Rails希望我在一个地方定义为单数的标识符在其他地方以复数形式使用,这让我很恼火。例如,我可能想在
config/routes.rb
中定义类似的内容:
resource :dashboard, :only => [:show]
然后我需要一个控制器DashboardController
来显示有关应用程序某些方面的摘要信息,从多个数据库表收集信息。因此,这里,仪表板
不涉及应用程序的任何模型,而且将控制器的名称命名为仪表板控制器
会很奇怪
我找到了一个很好的解决办法,解决了中国自动多元化的烦恼。简言之,编辑文件config/initializers/endocations.rb
,并将不希望自动复数的单词添加到此定义中:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable %w( dashboard foo bar baz )
end
如果控制器是一个资源,那么它必须是复数 比如说 控制器
articles_controller.rb
模型
但是,当您没有相应的模型时,可以使用单数控制器名称,如
welcome_controller.rb
Rails中控制器的命名约定有利于控制器名称中最后一个单词的复数化,尽管不是严格要求的(例如
ApplicationController
)
例如,clientscoontroller
优于ClientController
,SiteAdminsController
优于SiteAdminControlle
r或SiteAdminsController
,等等
遵循此约定将允许您使用默认路由生成器(例如资源等),而无需限定每个:path
或:controller
,并将在整个应用程序中保持URL和路径帮助程序的使用一致
Ref:如果用户对应的控制器就是用户控制器,不是更自然吗??此外,如果您依赖于默认路由,则会得到类似于/users/edit的url,这看起来像是在编辑所有用户。对我来说,这一点都不自然。@allyourcode:嗯,我想这都是主观的。对我来说,让/users列出所有用户比/user更自然。哦,这是一种RESTful方式。@Can“RESTful方式”听起来像是一首崇拜的圣歌。不过,这并不让我感到惊讶,因为Rails总体上相当虔诚。我喜欢Rails对REST的痴迷,但默认路由不是restful。即使配置RESTful路由也是不自然的。在连接的第二个参数中包括:conditions=>{:method=>:post}没有任何意义,因为散列应该指定如何处理与当前规则匹配的任何请求,而不是指定任何给定请求是否与当前规则匹配。@根据编辑的默认路由,所有您的代码都是/users/:id/edit,而不是/users/edit。对我来说,说“在所有用户中,用id:id编辑用户”听起来很自然。和Can Berk Guder的评论一样。此外,我在理解你的最后一句/段落时遇到了一些问题,因为标点符号太少了!对此很抱歉,我的意思是,创建自定义帮助程序可能比使用默认帮助程序更好,因为默认帮助程序的名称并不总是完全捕获它们将要使用的位置。如果您有许多将用于