0

プロジェクトのメインページのロールオーバーメニューを作成したいと思います。これは、サイトのすべてのページに表示されます。メインメニュー項目はとSHOWSですPROGRAMS。誰かがこれらのボタンをロールオーバーすると、すべてのプログラムがポップアップdiv内に一覧表示されます。(プログラムは私のモデルの名前であり、ショー、映画、テレビ番組などの両方に使用する一般的な名前です。)

今...

これが私の協会です:

Program.rb

class Program 
  include Mongoid::Document
  include Mongoid::Timestamps

  field :title
  field :content

  belongs_to :program_category

end

program_category.rb

  class ProgramCategory 
    include Mongoid::Document
    include Mongoid::Timestamps

    field :title
    field :content

    has_many :programs

  end

program.titleメニュー内にsを表示する必要があります。このような:

SHOWS         PROGRAMS
  \- Lost        \- Ellen
  \- Dexter      \- Marta Stuart
  \- Alf         \- Jey Leno Show

さて...私は今このようにこれをやっています:

home_controller.rb

クラスHomeController<ApplicationController

 def index
     @menu_programs = Program.all.where(program_category_id: "50a7c373ce3a6bcc0a000006").limit(10)    #Yes, i think it's lame too...
     @menu_shows = Program.all.where(program_category_id: "50a67f36ce3a6b840d000007").limit(10) # And yes I'm using MonoDB and Mongoid
  end

ええ...それらはprogram_category_idsであり、非常にハードコーディングされています!!

のような気がする...

これはベストプラクティスではありません!

質問は次のとおりです。

関連するモデルのメニュー項目を表示するためのベストプラクティスは何ですか?「EagerLoading」という名前の人がいると聞きましたが、誰かが説明してもらえますか?n + 1の問題のため、36のクエリがあります...

どんな提案も歓迎します。

ありがとうございました。

4

2 に答える 2

0

質問の答えWhat is best practice to show menu items from associated models?は次のとおりです。

フラグメントキャッシングを使用すると、私は思います。IMHOを積極的にロードするよりもさらに重要です。

于 2012-12-05T17:11:13.697 に答える
0

その非常に単純な、ちょうど使用

 @menu_programs = Program.where(program_category_id: "50a7c373ce3a6bcc0a000006").include(:program_cateory).limit(10)
 @menu_shows = Program.where(program_category_id: "50a67f36ce3a6b840d000007").include(:program_cateory).limit(10) 

注意してください。クエリから .all を削除しました。

于 2012-11-21T09:52:41.063 に答える