私のコードはまだ開発中であり、生産ではありません。私は、いくつかのビューに対して必要なデータを生成する壁を打っています。多型関連を削除する必要がありますか?
皆さんを詳細に埋め込むことなく、基本的に複数のモデルの関連付けをナビゲートして、各レベルで情報を取得したいと考えています。私に問題を与えている1つの関連は、多態性のbelongs_toです。ここには最も関連性の高い関連団体があります
Model Post
belongs_to :subtopic
has_many :flags, :as => :flaggable
Model Subtopic
has_many :flags, :as => :flaggable
Model Flag
belongs_to :flaggable, :polymorphic => true
私は、フラグ#インデックスビューに複数のフラグを表示したいと思います。私が表示したい他のモデルからの情報もありますが、これをもっと簡単にするためにここでは詳細を省いています。
私のFlags_controller#indexアクションで、私は現在、データベースから必要なものすべてをプルするのに@flags = paginate_by_sql
を使用しています。私は正常にデータを取得することができますが、関連するモデルオブジェクトをeager-loadedにすることはできません(ただし、必要なデータはすべてメモリ内にあります)。私は今いくつかのオプションを見ています:
@flagsオブジェクトのSQLデータを処理するために私のビューを書き直してください。これはうまくいくはずで、インデックスページの行ごとに5-6アソシエーションモデルのSQLクエリーが行われなくなりますが、非常に面白く見えます。多型から離れて一人の個人のフラグ
変更モデル階層/定義を見たとき、私は、唯一のロードするために私の見解を簡素化し、より詳細な情報については、追加のページを作成
可能であればこれを避けるしたいのですが継承への関連。効果的に
Subtopic
とPost
の親となるモジュールまたはクラスFlaggableObject
を作成します。
私は第三の選択肢に傾いていますが、私はきれいに私はRailsのActiveRecordのヘルパーを使用するすべての情報を引き出すことができるでしょうことは確かではありませんよ。
私はあなたがよりよい解決策
EDITしている場合、これは、より重要なのは、仕事とするかどうかの洞察たい:私は
@flags = Flag.find(:all,:conditions=> "flaggable_type = 'Post'", :include => [{:flaggable=>[:user,{:subtopic=>:category}]},:user]).paginate(:page => 1)
=> (valid response)
@flags = Flag.find(:all,:conditions=> ["flaggable_type = 'Post' AND
post.subtopic.category_id IN ?", [2,3,4,5]], :include => [{:flaggable=>
[:user, {:subtopic=>:category}]},:user]).paginate(:page => 1)
=> ActiveRecord::EagerLoadPolymorphicError: Can not eagerly load the polymorphic association :flaggable
熱心なロードはポリモーフィック団体では動作しませんので、私はpaginate_by_sqlを使用している理由です。私は確かに二重にチェックして、このエラーが発生しました。 '多態的な関連付けを熱心に読み込むことはできません:flaggable' –
どのバージョンのrails/will_paginateを使用していますか?この回答を投稿する前に、Rails 3.0.7でこれをテストし、will_paginate 2.3.15。 will_paginateは欠けている 'add_limit!'メソッドを探しますが、それをハッキングした後にうまくいきました。 –
私はレール3.0.7であり、予定は3.0です.pre2。私はwill_paginate、 'g = Flag.includes(:flaggable).all'なしで試してみましたが、うまくいきました。 will_paginate呼び出しで追加するとエラーが発生しました。あなたは 'add_limit! 'で何をしましたか? –