11

我要作出这样的支架:Ruby on Rails的约定命名日期/时间字段

rails generate scaffold Job started_at:datetime completed_at:datetime price:decimal paid_at:datetime estimated_completion_at:datetime comment:text 

我已经添加了“_at”于日期字段,因为这似乎是惯例为轨道时间戳字段可以是日期时间的“_at”或日期的“_on”。但这实际上是一个惯例吗?如果我只是“付费”而不是“paid_at”和“完成”而不是“completed_at”,那么可以吗?

我真的想从一开始就得到这个权利。我一直在C#编程多年,但我是Ruby on Rails的新手。我喜欢所有的惯例,并且我想确保我以正确的'轨道方式'来做这件事。

回答

26

我不知道任何具体的轨道约定,它并不重要,因为在轨道上没有任何东西关闭日期时间字段。我一直使用的约定是带有_at的后缀datetime列和具有_on的日期列。在一天和一段时间内说出来似乎更自然。

+0

它不会破坏任何东西,如果你不遵循它,但是这是命名约定。 – Steve 2014-11-22 04:11:04

+0

我本公约同意,因为他们很清楚地表明一个时间/日期与平原日期。拥有像Employee.hired_at场听起来很可笑与Employee.hired_on听起来很完美。就像许多事情一样,只要你一致,你做什么并不重要。 – mroach 2015-01-28 02:48:01

1

它可能不是Rails中的约定,但在date/datetime列的末尾添加_at实际上是有意义的。与paid相比,paid_at为您提供了使用日期/日期时间对象的概念,而paid也可以是解释付款状态的布尔值或字符串。所以我猜这不仅限于Rails。

3

其实,有了两个特殊时间戳列的名称在Rails的一个约定:created_atupdated_at有特殊的行为。从 Active Record Basics — Ruby on Rails Guides; 2.2 Schema Conventions

也有一些可选的列名,将增加额外的功能,Active Record的实例:

  • created_at - 自动被设置为当前日期和首次创建了创纪录的时间。
  • updated_at - 每当记录更新时自动设置为当前日期和时间。
  • ...

有在 “_ON” 结尾的列名的该页面没有提及。

3

如何命名日期和时间列不是官方声明的约定,并且不会影响代码的工作方式。但是,如果你想要使用Rails的方式«你应该遵循rails社区普遍接受的约定。

  • 首先,有一个a community-driven Ruby on Rails style guide,但它不包含任何日期列命名约定。

  • 一个提示是活动记录时间戳列,就像@sierrasdetandil在他们的答案中指出的created_at一样。

  • 了解一些约定的另一种方法是查看流行的Rails商店的Rails风格指南。例如thoughtbot state in their style guide

  • _on后缀名称日期列。
  • _at后缀名称日期时间列。
  • 名称时间列(指一天中没有日期的时间)与_time后缀。

这将帮助您找到适合您的列好名字并阻止其他开发者的困惑。我觉得这是遵循一个好习惯,你可能也一样,只要你没有一个令人信服的理由,不同的命名列。