当前位置:  开发笔记 > 后端 > 正文

Rails中的单个或多个控制器和帮助器名称

如何解决《Rails中的单个或多个控制器和帮助器名称》经验,为你挑选了5个好方法。

对控制器和助手使用单数名称有什么不利吗?似乎没有什么依赖于此.它甚至看起来帮助者不必像对应的控制器那样对单数与复数做出相同的选择,至少根据我的有限实验.真的吗?



1> jpgeek..:

绝对是复数.

具有宁静的路由和独特的控制器

控制器:

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


同意.控制器的Rails 3.1生成器帮助消息使用"CreditCard"(单数)作为示例令人困惑.
Rails现在使用复数:rails生成控制器CreditCards打开借记卡贷款关闭
在这里仍然有单一的CreditCard:http://guides.rubyonrails.org/command_line.html#rails-generate

2> Can Berk Güd..:

对控制器使用多个名称只是一种惯例.

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

对于助手,默认情况下所有助手都可以使用所有助手,因此从技术上讲,如何为助手命名并不重要.将控制器的辅助函数保存在与控制器同名的帮助程序中只是另一种约定.


对应于User的控制器是不是更自然的UserController?此外,如果你依赖默认路由,你会得到看起来像/ users/edit的网址,看起来你正在编辑所有用户.对我来说,这根本不是很自然.
@allyourcode:嗯,我想这都是主观的.对我来说,拥有/用户列出所有用户比/ user更自然.
@Can"RESTful way"听起来像一个邪教颂歌.然而,这并不让我感到惊讶,因为Rails在整体上非常虔诚.我喜欢Rails如何着迷于REST,但默认路由并不安宁.即使配置RESTful路由也不自然.包括:conditions => {:method =>:post}在第二个连接参数中是没有意义的,因为哈希应该指定如何处理与当前规则匹配的任何请求,而不是_whether_任何给定的请求与当前规则匹配.
@allyourcode根据[this](http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default)编辑的默认路线是/ users /:id/edit而不是/ users /编辑.说"在所有用户之外,用id:id编辑用户"对我来说听起来很自然.

3> Ryan..:

模型是单数的,因为它引用了像User这样的单个对象.控制器是复数,因为它是用户集合的控件(方法).如何命名路线完全取决于该开发人员.我从未让用户抱怨网络请求的网址是单数或复数.最终结果是在为最终用户提供高质量页面显示或API请求时维护当前和未来贡献者的通用约定.



4> Nerian..:

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


实际上这是正确答案b/c,如果你读它,它解释复数是一组资源的正确答案.对于单例资源,单数是正确的答案.文档中的示例.事实上,这个在其他帖子中得到了很好的回答:http://stackoverflow.com/questions/2614858/ruby-on-rails-differentiating-plural-vs-singular-resource-in-a-rest-api

5> Teemu Leisti..:

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

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有