Ruby,使用'?' - db或模型方法?

时间:2011-07-18 12:15:10

标签: ruby-on-rails activerecord

我喜欢用?对于布尔字段,例如,'animals'表“alive?”非常明显。 我在哪里定义这个?在创建表迁移时,是否使用它命名db字段(不要这么认为)。 或者它是自动的布尔字段还是我在活动记录模型类中有一个小方法用于表示类似def alive的动物?如果活着那么真的是其他假结束?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

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

作为一个额外的准确,我喜欢用is_前缀命名布尔字段。 is_alive,为您提供is_alive?