2011-08-05 131 views
1

我觉得我在这里做的事情很愚蠢。我正在制作一个简单的TODO列表应用程序(我意识到已经有一百万个)。我有一个项目定义和该项目中的任务可以分配的各种状态。Rails 3渲染部分零对象

不管是什么,我打的页面时收到以下错误信息:

未定义的方法`对于无题”: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部分:

<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

您能告诉我们状态/ _show部分内容吗? –

+0

加上可能是指向罪魁祸首的堆栈跟踪部分。 – Thilo

回答

2

我认为,问题是,你指的是@status中的ERB部分,在这里你应该指的是status,没有领先@

@status表示查找定义的实例变量。虽然通过:status => s意味着该视图将通过局部变量访问s,该局部变量名为status

此外,如果简单:status => s不起作用,请尝试:locals => {:status => s}。无论如何,在视图中访问status,而不是@status

+0

谢谢,这正是它是什么。 –

1

最大的问题是:status是渲染选项。它将http代码呈现为200或:ok。

什么应该工作是:

<%= render :partial => 'statuses/show', :locals => { :status => s } %> 

和不使用@的变量。

<%= status.title %>