0

アクティブな 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 のクラス定義を参照するため、これは機能しません。これが可能なことなのかどうかを調べようとしていました。

私は理にかなっていますか?

4

2 に答える 2

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 に答える
0

やってみました?

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

これは、Ruby 1.9 の新しいハッシュ構文を 'stab' またはlambda operatorと共に使用しています。

于 2013-02-15T06:11:47.377 に答える