0

我有一個方法定義爲運動員,它是用戶模型中的創建者,以及定義爲默認值爲false的運動員的布爾列。切換數據庫值

提供者是Twitter或Facebook,如果提供者不是其中的任何一個,那麼我希望它只是在下面的方法中將運動員列切換爲true。

def athlete? 
    provider.blank? 
    end 

我嘗試了多件事情,但沒有運氣像下面的切換方法沒有運氣。

def athlete? 
    provider.blank? 
    user.toggle!(:athlete) 
    end 

回答

1

因爲我不知道供應商的列類型,我假設它是與「臉譜」可能值的字符串,「推特」和「」。嘗試這樣的事情,讓我知道你會得到什麼

def athlete? 
    !provider.any? { |p| %w(facebook twitter).include?(p) } 
end 

這一切確實是檢查是否提供包含「推特」或「臉譜」,如果沒有,則返回true。

如果您想更新的屬性,然後做這樣的事情:

def athlete=(athlete) 
    self[:athlete] = !provider.nil? && !provider.any? { |p| %w(facebook twitter).include?(p) } rescue true 
end 
+0

糾正任何的Twitter,Facebook或空白。我想更新屬性,所以我嘗試了第二種方法,並得到這個錯誤:'code'undefined method' any?'爲零:NilClass – CrazyCoderMonkey 2012-08-04 22:40:02

+0

您是否正在創建新記錄?如果是這樣,那麼「提供者」沒有被設置,這就是導致錯誤的原因。如果發生錯誤,我會將我的代碼塊更新爲默認值「true」。讓我知道你是如何使用代碼的,你是在創建一個新的記錄?更新?查看? – 2012-08-04 22:47:07

+0

我創建了一條新記錄,但默認情況下提供者應該是空白的,運動員列應該是false,如果提供者爲空,則設置爲true。它的工作現在沒有錯誤,但它不保存對數據庫的更改,所以運動員專欄仍然是錯誤的。謝謝 – CrazyCoderMonkey 2012-08-04 22:56:15