我正在使用Rails 4。
在controller / application_controller.rb中。 我想使用 helper_method 从烹饪模型转到视图以制作补充工具栏:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
helper_method :sidebar_values
def sidebar_values
@food_types = FoodType.all
@cuisines = Cuisine.all
end
end
并在view / layout / application.html.erb
中<div class="panel">
Cuisine List:
<% @cuisines.each do |c| %>
<%= c.name %>
<% end %>
</div>
但我收到了一个错误:
未定义的方法`每个&#39;为零:NilClass 在这一行:
&lt;%@ cuisines.each do | c | %GT;
我在这做什么错?确保烹饪模型具有一定的价值。
答案 0 :(得分:0)
您需要在控制器或视图中调用sidebar_values
。然后将定义@cuisines
,您可以使用它。
既然你想要它在默认布局中,要在所有页面中使用(我假设),我会在ApplicationController中的before_filter中调用它,就像这样
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_filter :sidebar_values
def sidebar_values
@food_types = FoodType.all
@cuisines = Cuisine.all
end
end
您的问题中的观看代码现在应该可以使用。
注意:
“set_sidebar_values”实际上是该方法的更好名称。
我改变它所以它不再是一个辅助方法 - 如果它总是被控制器调用,那就没有必要把它作为帮助器了。但是如果您决定不在before_filter
答案 1 :(得分:0)
在application_controller.rb
中,您可以设置实例变量,这些变量将在整个
before_filter :get_cuisines_for_navbar
def get_cuisines_for_navbar
@cuisines= Cuisine.all.map(&:name).uniq
end
因此,布局/视图/导航中可以使用@cuisines
...您可以随时轻松访问
<div class="panel">
Cuisine List:
<% @cuisines.each do |c| %>
<%= c.name %>
<% end %>
</div>