【问题标题】:Ruby, use of '?' - db or model method?红宝石,使用“?” - 数据库或模型方法?
【发布时间】:2011-07-18 12:15:10
【问题描述】:

我喜欢使用 ?对于布尔字段,例如,对于“动物”表“活着?”非常明显。 我在哪里定义这个?创建表迁移时是否用它命名db字段(不这么认为)。 或者它对于布尔字段是自动的,还是我在动物的活动记录模型类中有一个小方法,说像 def alive 之类的东西? if alive then true else false end ?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    Rails 会自动为模型中的每个字段生成一个以? 结尾的方法。 一些例子:

    Animal #=> Animal(id: integer, alive: boolean, name: string)
    a = Animal.new
    
    a.alive #=> nil
    a.alive? #=> false
    a.alive = true
    a.alive? #=> true
    
    a.name #=> nil
    a.name? #=> false
    a.name = "Giraffe"
    a.name? #=> true
    

    还请注意,您可以轻松定义自己的 ? 方法:

    class Animal
      def young?
        created_at > 1.day.ago
      end
    end
    

    【讨论】:

      【解决方案2】:

      对于 ActiveRecord 中的所有布尔字段,此行为是自动的。

      作为一个额外的细节,我喜欢用is_ 前缀命名布尔字段。 is_alive,给你is_alive?

      【讨论】:

      • 共享代码时的良好但个人标准是所有人使用和维护的噩梦。
      • 直接从 Ruby 和 Rails 本身借来的。 is_a?、'is_missing?'、'is_eos?'等
      • 是的,它们就像 ruby​​ 的方法命名一样很棒。它们遵循相同的标准和格式,这也很棒。然而,我仍然坚信:共享代码时的个人标准是所有人使用和维护的噩梦。请思考 :) 如果你能让它们进入 ruby​​ 核心没问题。
      猜你喜欢
      • 1970-01-01
      • 2019-06-18
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2013-03-19
      • 2010-09-08
      相关资源
      最近更新 更多