0

ページにクラスを適用して、何かが遅れていて注意が必要であることを示すかどうかを判断するために使用される2つのメソッドがあります。

まったく新しいユーザーが登録すると、エラーが発生します。

undefined method `last_contact_done_date=' for #<User:0x6183708>

エラーを参照している行は次のとおりです。

2:   <div class="span3 <%= "overdue" if (signed_in? && contact_overdue?(current_user.id)) %>">

方法はこれです(contact_overdue?ホームページヘルパーで)

def contact_overdue?(user_id)
  @user = User.find_by_id(user_id)
  return true if (Date.today - (@user.last_contact_done_date ||= Date.tomorrow)) > 6
end

そしてlast_contact_done_dateメソッドはUserモデルではこれです

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

||=メソッドで演算子を使用している場合、が。contact_overdue?の場合は-1を返すと思いました。しかし、それは機能していないようです。どの演算子を使用する必要がありますか、または連絡先がない場合にメソッドから返されるようにメソッドを変更するにはどうすればよいですか?last_contact_done_datenillast_contact_done_datecontact_overdue?falsecontact_overdue?

4

1 に答える 1

0

-1最終連絡完了日がない場合のデフォルト値を返すには、次を使用します。

@user.last_contact_done_date || -1

Date.tomorrow(戻ることを期待するのは無理-1です;))

||=代入演算子です。a ||= bと同等a = a || bです; が属性の場合a(つまり、接頭辞にドットとインスタンスが付いている場合)、属性c.aに割り当てるとメソッドが呼び出されますa=。したがって、コードではlast_contact_done_date=、割り当てを処理するために名前が付けられたメソッドが必要ですが、そうではありません。

于 2012-11-22T01:19:30.577 に答える