关于helper_method的Rails4

时间:2014-07-29 03:42:36

标签: ruby-on-rails

我对helper_method提出疑问。

当我在/controller/application_controller.rb

中添加fuc时
helper_method :values

def values
  @food = Food.all
  @food_type = FoodType.all
end

我想在/layouts/application.html.erb

上使用var

代码

<% @food.each do |fp|%>
  <p><%= fp.name %></p>
<% end %>

<% @food_type.each do |ft|%>
  <p><%= ft.name %></p>
<% end %>

但它返回nill。

请教我,很多

2 个答案:

答案 0 :(得分:1)

你可以试试这个

application_controller.rb

def values
  @food = Food.all
  @food_type = FoodType.all
  [@food, @food_type]
end

application.html.erb

<%food, food_type = values%>
<% food.each do |fp|%>
<p><%= fp.name %></p>
<% end %>

<% food_type.each do |ft|%>
<p><%= ft.name %></p>
<% end %>

答案 1 :(得分:0)

<强> DRY

使用before_action回调

会更好

您遇到的问题是helper是一种为应用程序创建功能的简单方法。 IE将你的一些数据传递给帮助器,它会&#34; crunch&#34;数据,并返回合理的回应。

这就是Vimsha的答案被接受的原因 - 他已经做到了这样,你的辅助方法将返回你需要的值;因此,如果您想使用它拥有的数据,则需要调用该方法。

-

真正的答案(考虑到您只是希望能够在应用程序布局中使用@food@food_type变量),是使用回调每次都设置这些变量:

#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
   before_action :set_vars

   private

   def set_vars
      @food = Food.all
      @food_type = FoodType.all
   end
end

虽然效率相对较低(您最好缓存此数据,因此每次都无法ping您的数据库),您将能够使用@food和{{1在您的应用程序布局中没有问题