ruby-on-rails - 时间戳列是否意味着响应 bool 方法调用?

标签 ruby-on-rails ruby activerecord ruby-on-rails-4 rails-activerecord

我刚刚注意到我可以在 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/

相关文章:

ruby-on-rails - ajax, link_to remote 在 ruby​​ on rails 中

javascript - 从 JavaScript 生成的 Cookie 中解析 Rails 中的 JSON 字符串

ruby - "::"符号有什么重要意义?

Ruby 版本在终端和 bash 中有所不同

java - 在 Ruby 中实现 Java 应用程序

ruby-on-rails - 使用 Arel 对 AND 和 OR 子句进行分组

mysql - 防止 Rails 4 迁移将时间戳更改为日期时间?

sql - rails 。我为什么要使用 ActiveRecord?

ruby-on-rails - Rails 事件记录导入 : How do I know how many records to insert in one batch?

ruby-on-rails - 在 Rails 3 上使用计算进行分组查询