我有一个welcome.html.erb
页面welcome_controller
。在这个页面上,我尝试渲染属于Screen
模型的部分,但它返回NoMethodError: undefined method 'each' for nil:NilClass
。这是代码:
welcome.html.erb
:
<%= render 'screens/all` %>
_all.html.erb
:
<%= @screens.each do |screen| %>
<%= link_to screen do %>
<img src="">
<% end %>
<% end %>
screens_controller.rb
:
def all
@screens = Screen.all.order('created_at ASC')
end
答案 0 :(得分:1)
嘿,你做错了。
def all
@screens = Screen.all.order('created_at ASC')
end
screens_controller.rb
您需要在welcome_controller.rb
的欢迎方法中编写实例,这样就不会给您带来错误。
通过这种方式,你可以访问部分和另外一件事,在本地传递部分变量,并使用它而不是实际的实例。
<%= render :partial =>'screens/all`, :locals => {:screens => @screens} %>
答案 1 :(得分:1)
您正在使用的实例变量(@screens
)应来自任何控制器操作呈现welcome.html.erb
。然后你应该明确地将它作为一个本地传递(就像Bharat在他的回答中所示)。
答案 2 :(得分:0)
你忘了传递变量
尝试使用
<%= render 'screens/all',:screens => @screens %>