我正在制作一个电子商务应用程序,其中类别在所有页面的侧栏中都可见。我在应用程序控制器中写了一个方法
def categories
@categories = Category.all
end
但是我怎样才能让这个方法在默认情况下对所有控制器和动作都可用,这样我就不必在每个动作中专门调用这个方法
def list
categories
@products = Product.order('title').page(params[:page]).per(4)
end
我正在制作一个电子商务应用程序,其中类别在所有页面的侧栏中都可见。我在应用程序控制器中写了一个方法
def categories
@categories = Category.all
end
但是我怎样才能让这个方法在默认情况下对所有控制器和动作都可用,这样我就不必在每个动作中专门调用这个方法
def list
categories
@products = Product.order('title').page(params[:page]).per(4)
end
您可以在其中定义您的方法,application_controller.rb
并且由于每个其他控制器都继承自该方法,因此该方法将可用于所有控制器。此外,要使其成为在视图中可用的辅助方法,您可以helper_method :my_method
在application_controller.rb
.
现在,为了在控制器中的任何其他操作之前自动评估它,您可以使用 before_filter。在控制器中添加before_filter :my_method
您希望在任何操作之前评估此方法或在application_controller.rb中
也许最合适的方法是使用宝石细胞。绝对应该尝试:http ://cells.rubyforge.org/
如果您想要一些必须跨越整个应用程序的东西,例如在这种情况下:@categories,然后编写一个帮助程序。
在app/helpers/application_helper.rb
module ApplicationHelper
def get_all_categories
@categories = Category.all
end
end
我不认为有办法在全球范围内运行。您可以在每个操作之前调用它来运行它,before_filter
但您必须再次在每个控制器中指定它!
我的建议是将类别侧边栏的内容放在包含如下调用的部分中:
<% Category.all.each do |category| %>
<% do stuff to display all categories %>
<% end %>
然后你可以简单地将render
调用添加到你的layout/application.html.erb
那会为你做这件事!