1

これは、「アプローチ方法」スタイルの質問です。しかし、ROR でヘッダーとナビゲーションを記述している場合、データベース クエリが必要ですが、すべてのページで同じです。変数をどのように設定すればよいですか?

これまで、各コントローラーでリクエストを繰り返してきましたが、フィルターについて言及している投稿を見ました。しかし、これにアプローチするのが最善の方法ですか?

基本的に私がやろうとしているのは、このコードを実行してヘッダー ナビゲーションのカテゴリを生成することです。

 @top_categories = Category.roots

ビューには、カテゴリを読み取る _header と呼ばれるパーシャルがあり、これはデフォルトのレイアウトに含まれています。

ヘッダーはすべてのページで同じであるため、その変数をすべてのページで使用できるようにしたいのですが、Ruby を初めて使用するので、その方法がわかりません。

助けてくれてありがとう。

4

4 に答える 4

1

applicaion_controller.rb または application_helper.rb でヘルパー メソッドを作成できます。どこからでもapplication_controllerのメソッドにアクセスできます(私は思う;))。

配列などの静的コンテンツがある場合は、これを application.rb に保存するか、config/initializers フォルダー内の追加の rb ファイルに配置できます。

于 2012-08-26T10:52:32.760 に答える
0

before_filteこの場合、 in を使用するApplicationControllerのが最善のDRYアプローチだと思います。

このようにして、コントローラへのリクエストの前に、このメソッドは、記述したカテゴリをロードする場所で起動されます。

于 2012-08-26T10:49:57.717 に答える
0

あなたの質問を理解できれば、あなたのカテゴリーはあまり変更されていません。すべてのカテゴリをグローバル ハッシュにロードして、アプリケーションで使用できます。

このようなコードを ApplicationController に入れます

  before_filter :fill_categories


  def fill_categories
    if $CATEGORIES.blank?
      for category in Category.roots
        $CATEGORIES[category.category_id] = category
      end
    end
  end 

したがって、$CATEGORIES リストを使用して、アプリケーションを考え出すことができます。

于 2012-08-26T10:50:31.757 に答える
0

ヘルパー (のapplication_helper.rb) を使用することをお勧めします。ヘルパー メソッドを呼び出すだけCategory.rootsでよく、コントローラーをコールバックでごちゃごちゃにする必要はありません。

例..

class ApplicationHelper
  def nav_header
    Category.roots.map |category|
      content_tag( :div, category.name, :class => 'category_link' )
    end.join
  end
end

もちろん、この場合、ビューに複雑なロジックは必要ありませんが、クエリは単純なのでパーシャルに含めることができますが、すべてをプリロードする必要はありません。

<% Category.roots.each |category| -%>
  <%= link_to category.name, category %>
<% end -%>

もちろん、before フィルターを使用しても問題ありません。どちらのソリューションも本質的に「優れた」ものではありませんが、私はコントローラーをできるだけきれいに保つことを好みます。

于 2012-08-26T14:28:51.607 に答える