1

has_many :through私は3つのモデルをすべてメソッドを介して相互に関連付けています。

ProgramCategory
ProgramSubcategory
Program

アプリケーション内では、ProgramCategory.title、ProgramSubcategory.title、およびProgram.titleを頻繁に使用する必要があります。たとえば、動的なサイドバーメニューがあり、次のようになります。

|- Shows (ProgramCategory)
  |- Action (ProgramSubcategory)
    |- Lost (Program)
    |- Games of Thrones (Program)
    |- Dexter (Program)

私はの力を知っているのでapplication_controllerapplication_helperそしてpartials; これらすべてを組み合わせて、最も適切な方法を見つけることに迷いました。

モデルをどこでどのように呼び出す必要がありますか?すべてのコントローラーを介してアクセスできるように、メソッドをどこに構築する必要がありますか?単にパーシャルを作成してapplicationレイアウトでレンダリングする必要がありますか?

専門家の啓蒙が必要です...

ありがとう。

4

2 に答える 2

0

このサイドバーがアプリケーション全体のすべてのビューに表示される場合は、アプリケーション レイアウトに追加できます。次に、アプリケーション コントローラーに before フィルターを追加してデータを取得します。これは、アプリケーション コントローラーから継承するすべてのコントローラーの各アクションに対して実行されます。:indexまた、特定のアクションのみ、および:show(コントローラごとに) に制限することもできます。

class ApplicationController < ActionController::Base
  before_filter :get_side_bar, :only => [:index, :show]

  def get_side_bar
    #@sidebar = some code
  end
end

次に、ヘルパー メソッド (必要な場合) を使用@sidebarして、アプリケーション レイアウトでレンダリングできます。

一部のコントローラーでこのアクションをスキップする必要がある場合は、それを行うこともできます。これは、OtherController 内のインデックス以外のものをフィルター処理する前に、アプリケーション コントローラーをスキップします。

class OtherController < ApplicationController
  skip_before_filter :get_side_bar, :except => [:index]
end
于 2012-10-05T17:00:35.857 に答える
0

このナビゲーション バーは、表示しているデータのコア部分ではありません。すべてのページでほぼ同じです。したがって、コントローラには属しません。

これをヘルパー メソッドにし、その結果をビューにキャッシュします。

app/helpers/sidebar_helper.rb

module SidebarHelper
  def sidebar_data
    # blahblah, use any tag helper (include it here if necessary)
    # just remember to 
  end
end

app/controllers/your_controller.rb

class YourController < ApplicationController
  helper :sidebar
  # ...

(またはヘルパー メソッドをアプリケーション ヘルパーに配置して、どこでも使用できるようにします)

app/views/application/_sidebar.html.haml

- cache do
  # well, put here whatever you need to output the sidebar
  # use the sidebar_data, which should return precooked data on 
  # which you can build your nested <ul>s.
  # just indent it two spaces, so it's inside the "cache do" block

またapp/views/application/_sidebar.html.erb

<% cache do %>
  same as above, don't worry about indentation
<% end -%>

必要に応じてパーシャルを含めます

<%= render 'sidebar' %>
于 2012-10-06T07:08:04.333 に答える