15

我想做一个这样的脚手架:

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

我在日期时间字段中添加了“_at”,因为这似乎是惯例,因为 Rails 时间戳字段要么是日期时间的“_at”,要么是日期的“_on”。但这实际上是一个约定吗?如果我只是用“paid”而不是“paid_at”和“completed”而不是“completed_at”可以吗?

我真的很想从一开始就做到这一点。多年来我一直在用 c# 编程,但我对 ruby​​ on rails 很陌生。我喜欢所有的约定,我想确保我以正确的“rails 方式”来做这件事。

4

4 回答 4

32

我不知道任何特定的 Rails 约定,这并不重要,因为 Rails 中没有任何内容可以关闭日期时间字段。我一直采用的惯例是_at使用_on. 在一天一次的时间里说似乎总是更自然。

于 2013-02-23T09:32:51.233 回答
12

命名日期和时间列的方式不是官方规定的约定,也不会影响代码的工作方式。但是,如果您想采用“Rails 方式”,您可能应该遵循 Rails 社区普遍接受的约定。

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

这将帮助您为列找到好的名称,并防止其他开发人员混淆。我认为这是一个很好的约定,您也可以这样做,只要您没有令人信服的理由以不同的方式命名您的列。

于 2016-10-20T12:35:52.650 回答
5

实际上,Rails 中对两个特定时间戳列的名称有一个约定:并且created_at具有updated_at特殊的行为。来自 Active Record Basics — Ruby on Rails 指南;2.2 模式约定

还有一些可选的列名可以为 Active Record 实例添加额外的特性:

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

该页面中没有提到以“_on”结尾的列名。

于 2013-09-05T17:45:34.037 回答
1

_at这可能不是 Rails 中的约定,但在日期/日期时间列的末尾附加实际上是有意义的。与 just 相比paidpaid_at让您认为您正在使用日期/日期时间对象,paid同时也可以是解释付款状态的布尔值或字符串。所以我想这不仅限于 Rails。

于 2013-02-23T08:48:01.453 回答