通过Application Helper将变量从Model传递给View

时间:2015-04-08 08:40:48

标签: ruby-on-rails

我正在使用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;

我在这做什么错?确保烹饪模型具有一定的价值。

2 个答案:

答案 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>