6

すべてのページのサイドバーにカテゴリが表示される e コマース アプリケーションを作成しています。アプリケーションコントローラーにメソッドを書きました

def categories
  @categories = Category.all
end

しかし、すべてのアクションでこのメソッドを特に呼び出す必要がないように、このメソッドをデフォルトですべてのコントローラーとアクションで使用できるようにするにはどうすればよいですか

def list
  categories
  @products = Product.order('title').page(params[:page]).per(4)
end
4

4 に答える 4

11

でメソッドを定義でき、application_controller.rb他のすべてのコントローラーはこのコントローラーを継承するため、そのメソッドはすべてのコントローラーで使用できます。また、ビューで使用できるようにするためのヘルパー メソッドにするにhelper_method :my_methodは、application_controller.rb.

これで、コントローラー内の他のアクションの前に自動的に評価されるようにするには、before_filter を使用できます。アクションの前にこのメソッドを評価するコントローラーを追加before_filter :my_method するか、application_controller.rbに追加します。

于 2012-01-09T13:15:48.097 に答える
0

おそらく最も適切な方法は、gem セルを使用することです。ぜひ試してみてください: http://cells.rubyforge.org/

于 2012-01-09T13:36:41.453 に答える
-1

この場合の@categoriesのように、アプリケーション全体に必要なものが必要な場合は、ヘルパーを記述します。

app/helpers/application_helper.rb

module ApplicationHelper
  def get_all_categories
     @categories = Category.all
  end
end
于 2012-01-09T13:15:55.507 に答える
-2

このグローバルを実行する方法があるとは思いません。各アクションの前に呼び出されるように実行できますがbefore_filter、すべてのコントローラーでこれを再度指定する必要があります!

私の提案は、次のような Cal​​l を含むパーシャルにカテゴリのサイドバーを配置することです。

<% Category.all.each do |category| %>
     <% do stuff to display all categories %>
<% end %>

次に、あなたのためにそれを行うrender呼び出しをあなたに追加するだけです!layout/application.html.erb

于 2012-01-09T13:16:17.250 に答える