2

私は3つのモデルを持っています

City.rb

has_many :places

Place.rb

has_many :reviews, as: :reviewable

そして、確認したい属性状態のレビュー。

Review.rb

  belongs_to :reviewable, polymorphic: true
  state_machine :initial => :draft do #etc.

City.find( "somecity")。placesを呼び出せるようにしたいと思います

また、すべての場所を表示する代わりに、デフォルトのスコープを置き換えて、「公開済み」の状態のレビューがある場所のみを検索します

activerecordでは...

City.find("somecity").places.where('reviews.state' => 'published')

mongoidでこれを行う方法はありますか、または私の2番目のオプションは、レビューが公開されるたびにアクティブに設定される場所に新しい属性を組み込むことです。

4

1 に答える 1

4

結合に問題がある場合は、おそらくデータの非正規化を検討する必要があります。基本的に 2 つの場所でデータを複製するだけで、これは SQL の世界では適切とは見なされませんが、No-SQL を使用すると、通常は結合を実行する可能性があるケースを処理できます。速度を上げますが、より多くのスペースを使用します。

そのために、mongoid には 2 つの優れた gem があります。

https://github.com/dzello/mongoid_alize

非正規化に関する情報については、ブログ投稿を参照してください: http://blog.joshdzielak.com/blog/2012/05/03/releasing-mongoid-alize-comprehensive-field-denormalization-for-mongoid/

またはhttps://github.com/logandk/mongoid_denormalize

私の好みは前者ですが。

于 2012-07-28T18:02:28.747 に答える