呈现部分时的NoMethodError

时间:2016-04-14 12:09:28

标签: ruby-on-rails ruby

我有一个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

3 个答案:

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