在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問題的人,因爲這在你的調試中值得檢查。
這裏有什麼困惑?類型正在改變,因爲你正在索引數組.. ..'[index-1]'< - –
對不起,我遺漏了一個重要的細節;已經更新了問題 –
我現在已經刪除了對[[index-1]'的引用,因爲我真正的問題是沒有它,我得到了相同的結果。 –