我刚刚注意到我可以在 AR 时间戳上调用 bool 方法。我可以依赖这种行为,还是它是一个小故障?
foo.updated_at? #=> true if not nil, but false if nil
如果我有一个 @task.completed_on
列,它会很有用。我可以使用 completed_on
来确定任务是否已经完成(有时间戳,或者为 nil)。
@task.completed?
class Task < ActiveRecord::Base
def completed?
completed_on?
end
end
最佳答案
Rails 为 ActiveRecord 模型中的所有属性提供谓词方法(返回 bool 值并以问号为后缀的方法),无论数据库中列的类型如何,如果有值则返回 true,否则返回 false它是零。这根本不是故障。
您可以在持久化或最近初始化的模型中使用这种方法,如下所示:
u = User.find_by(email: "foo@bar.com")
u.email? # => true
u = User.new(email: "new@user.com")
u.email? # => true
您完全可以依赖这种行为。甚至建议将它用于 View 中的小条件,以及一种编写方法的优雅方式,就像您在 completed?
示例中所做的那样。
关于ruby-on-rails - 时间戳列是否意味着响应 bool 方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21705534/