我对helper_method
提出疑问。
当我在/controller/application_controller.rb
helper_method :values
def values
@food = Food.all
@food_type = FoodType.all
end
我想在/layouts/application.html.erb
代码
<% @food.each do |fp|%>
<p><%= fp.name %></p>
<% end %>
<% @food_type.each do |ft|%>
<p><%= ft.name %></p>
<% end %>
但它返回nill。
请教我,很多
答案 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在您的应用程序布局中没有问题