Rails列出问题

时间:2011-05-13 22:02:47

标签: ruby-on-rails scaffold nomethoderror

我生成了一个脚手架,我创建了一个临时应用程序。我想列出侧栏上的脚手架项目,应用程序的任何位置(在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

以下代码是左栏的代码。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Rails抱怨是因为你试图将nil视为数组。如果没有发布application.html.erb的行号,我必须猜测,但我猜我@items是零。

如果您在布局中包含此内容,则需要确保在每个请求中都设置了@items数组。是吗?执行此操作的一种简单方法是在application_controller.rb中放置before_filter

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

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

答案 1 :(得分:0)

确保你的控制器有这个:

@items = Item.all

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

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

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