Ruby/Rails - 以两个单词命名的模型(命名约定问题)

Chr*_*len 33 ruby ruby-on-rails naming-conventions

这实际上是一个关于命名约定的问题.

我有一个名为PromotedEvents的模型

该文件名为promote_events.rb

我创建了表:

create_table :promoted_events do |t|
Run Code Online (Sandbox Code Playgroud)

现在我在创建任何东西时遇到了问题,所以我想知道使用带有两个单词的模型是否有问题

我在控制台并尝试过

a = PromotedEvents.new

a = Promoted_Event.new

a = promoted_event.new
Run Code Online (Sandbox Code Playgroud)

并继续收到nameerror : uninitialized constant错误

有任何想法吗?

Ale*_*yne 53

你的班级应该是单一的.

将其命名PromotedEvent为文件promoted_event.rb

a = PromotedEvent.new
Run Code Online (Sandbox Code Playgroud)

  • 我认为你可以使用`ModelName`或`model_name`,并且会发生正确的魔术.但是`Model_Name`是不对的(驼峰或下划线,不是两者兼而有之).可以把它想象成创建模型类,因此它必须与类名匹配才是单数. (2认同)
  • 是的,@ AlexWayne是对的.根据[模型生成描述]两个`CamelCase`或`under_score`用法是正确的(https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/model/USAGE) . (2认同)

loo*_*non 21

型号名称是单一的和驼峰式的 pe = PromotedEvent.new()

该文件应该是 promoted_event.rb

控制器是复数

PromotedEventsController

常数是 ALL_CAPS

当地人是 separated_by_underscores_and_lowercase

表名是复数'SELECT*FROM promote_events`


mar*_*ada 10

如果它有帮助,我总是这样想:

模型名称是单数,因为它代表一个特定的东西.因此,PromotedEvent是具有名称,日期等的特定促销事件.

另一方面,表名是复数.这是因为该表存储了这些单数项的集合.所以,promote_events.

在rails中,文件名大多是常规问题,因为ruby在这方面有相当宽松的规则,但通常是这样class_name.rb.此页面可以帮助您更好地概述Ruby与Rails特定的使用位置和特定内容.