2013-02-15 17 views
0

我試圖發送上的活動記錄對象的關聯計數到redis-object gem一個Ruby/Rails的類的實例方法

class Post > ActiveRecord::Base 
    has_many :comments 

    include Redis::Objects 
    value :redis_comment_count, :default => self.comments.count 
end 

PS內,但外面訪問實例方法「工作得很好

但是這不起作用,因爲自己在代碼中的那個地方(它不在方法定義中)引用了Post的類定義而不是Post實例本身。我試圖弄清楚這是否有可能做到。

我有道理嗎?

回答

0

不幸的是,它看起來像你將不得不採取更長的方式爲你的評論設置保存回調。我瀏覽了寶石,它看起來不像以後通過一個proc來調用支持(請參閱here)。

順便說

除了這個事實,你是調用類的方法,而不是實例方法,被加載的類時self.comments.count評估,在那裏,當你撥打:

value :redis_comment_count, :default => self.comments.count 

# This becomes: 
# value :redis_comment_count, :default => 1 # Example 

而不是每次redis-objects gem使用value_options[:default]

如果您的課程不斷重新加載,此值將不斷得到重新評估,例如開發環境的默認設置。但是,在我們通常啓用cache_classes的生產環境中,只有在Rails應用程序啓動並加載模型時纔會評估此值。

如果支持,傳遞一個proc將會工作。

+0

我會傳入什麼程序? – concept47 2013-02-15 16:15:44

+0

但是,還沒有支持傳遞一個proc。 :-) – kristinalim 2013-02-15 17:23:32

+0

我知道......我只是好奇,如果我這樣做,我會通過什麼。我要把寶石分岔出來,讓它以這種方式工作 – concept47 2013-02-15 22:08:59

0

你試過了嗎?

value :redis_comment_count, default: -> { self.comments.count} 

這是使用Ruby 1.9的new hash syntax與 '刺' 或lambda operator一起。

+0

是的。我使用默認的ruby樣式:lambda {self.comments.count},並返回一個proc,這對我不起作用,我需要它返回實際值,但是當我嘗試lambda {self.comments。 count} .call當我重新加載時,出現錯誤「NoMethodError:undefined method'comments'for#」!在軌道控制檯 – concept47 2013-02-15 06:43:36

相關問題