0

我生成了一个脚手架,并创建了一个临时应用程序。我想在应用程序的任何地方(在 application.html.erb 内)的侧边栏上列出脚手架项目。我在application.html.erb中的左栏看起来像这样:

>  <div id="leftcolumn">
>     <% @items.each do |link| %>
>       <%= link_to link.title, link %>
>     <% end %>
>  </div>

单击每个项目将导致它的 Show 方法。运行之后,每当我尝试访问任何项目的任何方法时,它都会向我显示以下错误:

>     NoMethodError in Items#show
>     
>     Showing F:/Rails/items-list/app/views/layouts/application.html.erb
>     where line #17 raised:
>     
>     You have a nil object when you didn't expect it!
>     You might have expected an instance of Array.
>     The error occurred while evaluating nil.each

后面的代码是左列的代码。我该如何解决?

4

2 回答 2

1

Rails 抱怨是因为您试图将 nil 视为一个数组。如果不发布 application.html.erb 的行号,我不得不猜测,但我猜那@items是零。

如果您将其包含在您的布局中,那么您需要确保@items在每个请求上都设置了您的数组。是吗?一种简单的方法是before_filter在 application_controller.rb 中添加一个。

class ApplicationController < ActionController::Base
    ...
    before_filter setup_items
    ...
    def setup_items
        @items = Item.all
    end
    ...
end

这假设所有使用此布局的控制器都扩展了应用程序控制器。

于 2011-05-13T22:14:28.720 回答
0

确保你的控制器有这个:

@items = Item.all

然后在你看来你想要这个:

<div id="leftcolumn">
   <% @items.each do |link| %>
     <%= link_to link.title, link if link.title%>
   <% end %>
</div>

它可能会失败,因为其中一个links没有标题。

于 2011-05-13T23:16:31.247 回答