2013-08-28 62 views
0

product.rb,我有:爲什麼我的方法改變它正在處理的變量的類型?我怎樣才能阻止它?

def active_question_description_for_standard_element_and_index(standard, element, index) 
    active_questions_for_standard_and_element(standard, element)[index-1].try(:description) 
    end 

    def active_questions_for_standard_and_element(standard, element) 
    Rails.cache.fetch([self, standard, element, "product_active_questions_for_standard_and_element"]) { 
     questions_for_standard_and_element(standard, element).select{|q| q.active}} 
    end 

active_question_description_for_standard_element_and_index方法是給我這個錯誤:NoMethodError: undefined method 'description' for 0:Fixnum

因此,我從self.touch開始跳過緩存,然後輸入active_questions_for_standard_and_element(standard, element)。這將返回0

「嗯,」我想,「這意味着要返回一個數組,即使它是一個空數組,它並不意味着要返回一個Fixnum。」

因此,我嘗試questions_for_standard_and_element(standard, element).select{|q| q.active},並且返回[],就像您所期望的那樣。

那麼,爲什麼Rails將[]轉換爲0?而且,我該如何阻止它?

UPDATE

看來這個問題有一些與Rails.cache做,因爲當我從一切工作的方法將其刪除。到目前爲止,我不知道是什麼問題,因爲寫入[]到緩存工作得很好;再次讀回時,它不會轉換爲0

[1] pry(main)> Rails.cache.write('foo', []) 
Cache write: foo 
Dalli::Server#connect 127.0.0.1:11211 
=> true 
[2] pry(main)> Rails.cache.read('foo') 
Cache read: foo 
=> [] 

更新2:發現回答

的另一種方法被寫入到同一個高速緩存項。把這個聽到的提示告訴任何有Rails.cache問題的人,因爲這在你的調試中值得檢查。

+1

這裏有什麼困惑?類型正在改變,因爲你正在索引數組.. ..'[index-1]'< - –

+0

對不起,我遺漏了一個重要的細節;已經更新了問題 –

+0

我現在已經刪除了對[[index-1]'的引用,因爲我真正的問題是沒有它,我得到了相同的結果。 –

回答

0

active_questions_for_standard_and_element確實可能會返回一個數組,但通過將[index-1]應用於該數組,您將獲得該數組中的一個元素。除非你的數組是爲了包含子數組,否則你不應該期望active_questions_for_standard_and_element(...)[index-1]產生一個數組。

+0

對不起,我忽略了一個重要的細節;已經更新了這個問題 –

+0

我現在已經移除了對'[index-1]'的引用,因爲我真正的問題是沒有它,我得到了相同的結果。 –

相關問題