我试图从帐户到期日期中减去今天的日期,以便通过这样做来获得剩余的日期:
<% @accounts.each do |account| %>
<tr>
<td><%= account.name %> </td>
<td><%= account.email %> </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>
为什么这不起作用?
答案 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) %>