【问题标题】:Ruby on rails convention for naming date/time fieldsRuby on rails 命名日期/时间字段的约定
【发布时间】:2013-02-08 22:18:30
【问题描述】:

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

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 方式”来做这件事。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 coding-style naming-conventions


    【解决方案1】:

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

    【讨论】:

    • 如果你不遵守它不会破坏任何东西,但这是命名约定。
    • 我同意这个约定,因为它们非常清楚地表明时间/日期时间与普通日期。拥有像 Employee.hired_at 这样的字段听起来很荒谬,而 Employee.hired_on 听起来很完美。与许多事情一样,只要您始终如一,您做什么并不重要。
    【解决方案2】:

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

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

    • 一个提示是 Active Record 时间戳列,如 @sierrasdetandil 在他们的回答中指出的 created_at

    • 了解某些约定的另一种方法是查看流行的 Rails 商店的 Rails 样式指南。例如思想机器人state in their style guide:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我现在正在工作中讨论这个问题。 (关于 json 结构顺便说一句,但这与恕我直言无关)。原因确实是现有的日期属性名称对它们具有布尔含义。很公平,我完全支持自我记录代码,如果属性名称不明确,还有改进的余地。建议是使用后缀 At,但对我来说,这也带来了歧义。 At 既可以表示时间的某一时刻,也可以表示(物理)位置。在您的情况下,paid_at 也可以指一个位置(收银机、自助结账……)。我更喜欢 _date 作为后缀。
        • 我认为这真的取决于您在公司的惯例和标准。 paid_date 可以只是一个日期数据类型,而paid_at 可以是一个时间戳,就像在 Rails 中设置 created_atupdated_at 一样。对于位置,我个人会选择paid_location
        • 我同意标准和约定很重要,对于 Ruby,我同意遵守标准。但是,如果您需要定义标准/约定怎么办?我认为at 后缀是模棱两可的,因为它可以指代一个位置或一个时刻。因此,您建议使用locationdate 分别引用它们感觉是一个更好的选择。
        猜你喜欢
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多