2012-11-22 67 views
0

我有兩種方法用於確定是否將類應用於頁面以顯示某些內容已過期並需要注意。NoMethodError方法返回時無

我得到一個錯誤,當一個全新的用戶註冊:

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_datenil。但它似乎不起作用。我應該在last_contact_done_date中使用哪個操作員,或者我應該如何更改contact_overdue?方法,以便如果沒有聯繫人,則從contact_overdue?方法返回false

回答

0

要返回的-1的默認值時,有完成日期沒有最後的接觸,使用

@user.last_contact_done_date || -1 

(這是不合理的期望Date.tomorrow返回-1;))

||=是賦值運算符; a ||= b相當於a = a || b;如果a是一個屬性(即以點和實例爲前綴,c.a),分配給它將調用方法a=。因此,您的代碼要求您有一個名爲last_contact_done_date=的方法來處理分配,而您不需要。

+0

=最後調用的方法是什麼?我需要知道,所以我可以閱讀更多,並更好地理解它。 – kwh941

+0

如果您詢問'last_contact_done_date =',則屬性設置器或屬性編寫器 - 而不是屬性獲取器/讀取器。兩者統稱爲屬性訪問器或屬性(前者是Ruby語言,後者更通用)。 http://ruby.about.com/od/oo/ss/Using-Attributes.htm有點過分。如果您詢問'|| ='(實際上它不是一種方法),它是增強型或複合賦值運算符之一,請閱讀這裏進行總體概述:http://en.wikipedia.org/wiki/Augmented_assignment。它在Ruby中被特別稱爲條件賦值運算符。 – Amadan