访问ruby / Rails类中的实例方法但在实例方法之外

时间:2013-02-15 05:51:55

标签: ruby-on-rails ruby

我正在尝试将有效的Record对象关联的计数发送到redis-object gem

class Post > ActiveRecord::Base
    has_many :comments

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

PS:设置:默认=> “字符串”工作得很好

但是这不起作用,因为代码中那个地方的自己(它不在方法定义中)引用了Post的类定义,而不是post实例本身。我试图弄清楚这是否是可能的事情。

我有道理吗?

2 个答案:

答案 0 :(得分:0)

你试过吗?

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

使用Ruby 1.9的new hash syntax以及'stab'或lambda operator

答案 1 :(得分: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将起作用。