誰でも私がRailsアプリケーションで偉大な孫レコードの数を数えるのに役立つことができますか?例えばRailsアプリケーションで偉大な孫オブジェクトを数えるには?
、私は次のような何かをしたい:
class Country
has_many :states
has_many :cities, :through => :states
has_many :events, :through => :cities
end
class State
belongs_to :country
has_many :cities
has_many :events, :through => :cities
end
class City
has_one :country, :through => state
belongs_to :state
has_many :events
end
class Event
belongs_to :city, :counter_cache => true
has_one :state, :through => city, :counter_cache => true
has_one :country, :through => :state, :counter_cache => true
end
だから私は、各都市の、各状態のため、各国のイベントの数にアクセスできるようにしたいです。
私は市と州が働いていますが、祖父母国の偉大なモデルで実行されているcounter_cacheを取得できないようです。
私は何かを見逃しましたか?これは可能ですか?それを行うより良い方法はありますか?
コミュニティからいくつかのアイデアをいただければ幸いです。ありがとう!
アドバイスノーマルでありがとうございます。私はカウンタをキャッシュすることをお勧めします。あなたは長い協会を数えることを試みたことがありますか?私の実装がなぜ機能していないのか分かりません。それは....そうなのだろうか?私が何か明白なものを見逃しているのだろうかと思います。 –
ええ、私は 'has_many:through'を使って数えましたが、いくつかのレベルではない孫(孫だけではありません)に限られます。しかし、( 'app/models/country.rb')' has_many:events、:through =>:states'のようになり、 'app/models/state.rb'に相当する' has_many: =>:cities'、 'app/models/city.rb'には' has_many:events'があります。私はこの種の連鎖がうまくいくと思います。 – jefflunt
キャッシュカウンタははるかに簡単です。したがって、 'event'が作成されると' event.city.update_attribute(:event_count_cache、event.city.event_count_cash + 1) 'のような処理が行われ、' event.city.state'の同様のカウントキャッシュの増分が続きます各レベルでカウンタをインクリメントします。もちろん、イベントが破棄された場合、キャッシュカウンタが逆の場合に更新され、イベントが都市を変更した場合、キャッシュカウンタはすべて新しいもので再インクリメントされたものであることを確認する必要があります都市/州など – jefflunt