簡體   English   中英

在ruby / Rails類內部但在實例方法外部訪問實例方法

[英]accessing instance methods inside a ruby/Rails class but outside an instance method

我正在嘗試將活動Record對象的關聯計數發送到redis-object gem

class Post > ActiveRecord::Base
    has_many :comments

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

PS:設置:default =>“ string”效果很好

但這是行不通的,因為代碼中那個位置的self(它不在方法定義中)是指Post的類定義,而不是post實例本身。 我試圖弄清楚這是否有可能做到。

我說得通嗎

你有沒有嘗試過?

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

這使用了Ruby 1.9的新哈希語法以及'stab'或lambda運算符

不幸的是,您似乎需要為保存評論設置保存回調的方法更長一些。 我瀏覽了gem,它似乎不支持傳遞proc以便以后調用(請參閱此處 )。

順便說一句

除了您正在調用類方法而不是實例方法的事實之外,在加載類時也會對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將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM