我正在尝试将有效的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实例本身。我试图弄清楚这是否是可能的事情。
我有道理吗?
答案 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将起作用。