0

我正在尝试将活动记录对象关联的计数发送到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 实例本身。我试图弄清楚这是否有可能做到。

我说得有道理吗?

4

2 回答 2

0

你有没有尝试过?

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

那是使用 Ruby 1.9 的新哈希语法以及 'stab' 或lambda operator

于 2013-02-15T06:11:47.377 回答
0

不幸的是,看起来您将不得不采取更长的方式为您的评论设置保存回调。我浏览了 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 将起作用。

于 2013-02-15T07:58:54.263 回答