Rails 3渲染部分nil对象

时间:2011-08-05 02:27:26

标签: ruby-on-rails-3 partial-views

我觉得我在这里做一些蠢事。我正在制作一个简单的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

2 个答案:

答案 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 %>