【问题标题】:Can I replace (Date.current - created_at.to_date).to_i <= number_of_days with number_of_days.days.ago.to_date? Is it a good idea?我可以用 number_of_days.days.ago.to_date 替换 (Date.current - created_at.to_date).to_i <= number_of_days 吗?这是个好主意吗?
【发布时间】:2020-11-08 09:23:07
【问题描述】:

在我的 models/book.rb 我有这个

  def created_since?(number_of_days)
    (Date.current - created_at.to_date).to_i <= number_of_days
  end

用于查看文件,如

<% if @book.created_since?(30) %>

我可以用这样的东西优化它的编辑吗?

  def created_since?(number_of_days)
    number_of_days.days.ago.to_date
  end

这是个好主意吗?会一样吗?

【问题讨论】:

  • 任何后跟问号的方法都应该返回一个布尔值。您对该方法的最后实现似乎没有进行任何比较,因此返回一个布尔值。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

要从日期中减去天数,最简单的方法是使用日期。我会尝试这样的事情,来自here:

def created_since?(number_of_days)
  created_at.to_date >= Date.now - number_of_days
end

唯一的缺点是它不会精确到分钟,如果您确实想要这种准确性,则需要编辑时间而不是日期:

def created_since?(number_of_days)
  created_at >= Time.now - (number_of_days * 24 * 60 * 60)
end

这需要天数,将其转换为秒,然后使用它来找到正确的截止点。

【讨论】:

  • is created_at.to_date >= Date.now - number_of_days 比我的快?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 2016-02-24
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多