我觉得我在这里做一些蠢事。我正在制作一个简单的TODO列表应用程序(我意识到已经有一百万个)。我有一个项目定义和可以分配该项目中的任务的各种状态。
无论如何,我在点击页面时收到以下错误消息:
nil的未定义方法`title':NilClass
This question about nil objects非常相似,但建议的解决方案似乎无法解决我遇到的问题。我只有一个与项目相关的状态,它不是零。我想知道这个问题是否与作为协会的状态有关......
在我的项目中,我有:
<% @project.statuses.each do |s| %>
<%= s.inspect %>
<%= render 'statuses/show', :status => s %>
<% end %>
#if I take out the render line - the status shows up
现在的状态基本上只是一个通用的脚手架视图 - 如果我直接从控制器传递数据,它将收到一个对象@status。
...
我已经尝试过render :partial..., :locals => { :status = s}
等等。任何建议都会受到赞赏。
更新 - 添加了_show Partial:
<p id="notice"><%= notice %></p>
<p>
<b>Title:</b>
<%= @status.title %>
</p>
<p>
<b>Description:</b>
<%= @status.description %>
</p>
<p>
<b>Active:</b>
<%= @status.active %>
</p>
<%= link_to 'Edit', edit_status_path(@status) %> |
<%= link_to 'Back', statuses_path %>
更新 - 添加了更多错误消息
NoMethodError in Projects#show
Showing /home/.../app/views/statuses/_show.html.erb where line #5 raised:
undefined method `title' for nil:NilClass
答案 0 :(得分:2)
我认为问题在于您在ERB部分中引用了@status
,而您应该引用status
,而不是引导@
。
@status
表示查找已定义的实例变量。传递:status => s
表示视图可以通过名为s
的本地变量访问status
。
此外,如果只是:status => s
不起作用,请尝试:locals => {:status => s}
。无论如何,请在视图中访问status
,而不是@status
。
答案 1 :(得分:1)
最大的问题是:status
是渲染的选项。它呈现的http代码如200或:ok。
应该做些什么:
<%= render :partial => 'statuses/show', :locals => { :status => s } %>
并且不要将@
用于变量。
<%= status.title %>