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