Ruby on rails 方法返回nil时的NoMethodError

Ruby on rails 方法返回nil时的NoMethodError,ruby-on-rails,Ruby On Rails,我有两种方法用于确定是否将类应用于页面,以表明某些内容已过期,需要注意 当一个全新用户注册时,我收到一个错误: undefined method `last_contact_done_date=' for #<User:0x6183708> 最后一个联系人日期方法是用户模型中的方法 def last_contact_done_date self.contacts.order('date_done DESC').first.try(:date_done) end

我有两种方法用于确定是否将类应用于页面,以表明某些内容已过期,需要注意

当一个全新用户注册时,我收到一个错误:

undefined method `last_contact_done_date=' for #<User:0x6183708>
最后一个联系人日期方法是
用户
模型中的方法

  def last_contact_done_date
      self.contacts.order('date_done DESC').first.try(:date_done)
  end

我想如果我在
contact\u逾期?
方法中使用
|124;=
操作符,那么如果
最后一次联系\u done\u date
nil
,我会返回-1。但这似乎不起作用。在
上次联系人完成日期
中我应该使用什么运算符,或者我应该如何更改
联系人过期日期?
方法,以便在没有联系人的情况下,从
联系人过期日期?
方法返回
false
,以在没有上次联系人完成日期的情况下返回
-1
的默认值,使用

@user.last_contact_done_date || -1
(期望
日期明天返回
-1
;)是不合理的)


||=
是赋值运算符
a | |=b
相当于
a=a | | b
;如果
a
是一个属性(即前缀是一个点和一个实例,
c.a
),对它的赋值将调用方法
a=
。因此,您的代码要求您有一个名为
last\u contact\u done\u date=
的方法来处理分配,而您没有。

最后调用=的方法是什么?我需要知道,这样我才能读得更多,更好地理解它。如果你问的是
上次联系\u done\u date=
,那么是属性设置器或属性编写器,而不是属性获取器/读取器。两者统称为属性访问器或属性(前者是Ruby行话,后者更通用)。有点过头了。如果您询问的是
| |=
(这实际上不是一个方法),它是增广赋值运算符或复合赋值运算符之一,请阅读此处了解一般概述:。在Ruby中,它被专门称为条件赋值运算符。
  def last_contact_done_date
      self.contacts.order('date_done DESC').first.try(:date_done)
  end
@user.last_contact_done_date || -1