我生成了一个脚手架,我创建了一个临时应用程序。我想列出侧栏上的脚手架项目,应用程序的任何位置(在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
以下代码是左栏的代码。 我该如何解决这个问题?
答案 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
没有标题。