Rails格式化日期并减去

时间:2018-01-16 17:42:15

标签: ruby-on-rails ruby

我试图从帐户到期日期中减去今天的日期,以便通过这样做来获得剩余的日期:

<% @accounts.each do |account| %>
    <tr>
      <td><%= account.name %>&nbsp;</td>
      <td><%= account.email %>&nbsp;</td>
      <td><%= (account.expiration.try(:to_date) - Date.today).to_i %></td>

我收到此错误:undefined method '-' for nil:NilClass

在这一行:<td><%= (account.expiration.try(:to_date) - Date.today).to_i %></td>

为什么这不起作用?

1 个答案:

答案 0 :(得分:4)

你得到的是:

nil - Date.today
NoMethodError: undefined method `-' for nil:NilClass

当你正在使用try时,它不会引发任何异常,但如果被访问的对象没有响应所调用的方法,则返回nil。在您的情况下,它会向您nil提供,而您无法将-应用于零对象。

您可以将此类逻辑移动到帮助程序,检查属性是否为nil并返回默认值,否则执行操作:

# app/helpers/application_helper.rb
def expiration_substraction(account_expiration)
  return <default_value> if account_expiration.nil?
  (account_expiration.to_date - Date.today).to_i
end

这应该适用于您正在处理的视图:

<%= expiration_substraction(account.expiration) %>