使用部分给出“nil的未定义方法:NilClass”渲染集合

时间:2013-05-18 15:37:51

标签: ruby-on-rails

我正在尝试使用项目部分呈现Projects的集合,但我收到以下错误:

undefined method `customer' for nil:NilClass
Extracted source (around line #1):
1: <p><%= company_name(@project) %><p>

堆栈跟踪是:

app/helpers/projects_helper.rb:4:in `company_name'
app/views/projects/_summary.html.erb:1:in
app/views/customers/index.html.erb:11:in

因此,我的索引检查他们的项目是否开始:

<% if @projects.any? %>
  <%= render :partial => "projects/summary", :collection => @projects %>
<% end %>

我的部分(_summary.html.erb)只是:

<p><%= company_name(@project) %><p>
<p><%= summary_description(@project) %><p>

我的ProjectsHelper company_name方法是

def company_name(project)
  if project.customer.business_name.blank?
  ...Do stuff...

如果我通过rails控制台执行以下操作,它可以正常工作:

projects.first.customer.business_name.blank?

我真的很困惑因为我认为这就是渲染集合应该做的事情。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

你应该将你的部分改为

<p><%= company_name(project) %><p>
<p><%= summary_description(project) %><p>

请参阅“渲染集合”下的Rails documentation

答案 1 :(得分:1)

我弄清楚问题是什么。

这是因为我使用了一个不同名称的部分到我试图渲染的模型。我只需要渲染模型的摘要,所以我使用了摘要部分。在部分中,我的项目变量的“名称”是“摘要”。所以我把我的部分改为:

<p><%= company_name(summary) %><p>
<p><%= summary_description(summary) %><p>

它有效。对于像我这样的东西,Rails对我来说仍然是一个谜。从this帖子开始,答案是使用:: as =&gt; :FOO

<%= render :partial => "projects/summary", :collection => @projects, :as => :project %>