0

我正在尝试渲染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>

我的 ProjectsHelpercompany_name方法是

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

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

projects.first.customer.business_name.blank?

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

4

2 回答 2

3

您应该将您的部分更改为

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

请参阅“渲染集合”下的Rails 文档。

于 2013-05-18T16:08:58.440 回答
1

我弄清楚了问题所在。

这是因为我在尝试渲染的模型中使用了不同名称的部分。我只需要渲染模型的摘要,所以我使用了部分摘要。不过,在部分情况下,我的项目变量的“名称”是“摘要”。所以我将我的部分更改为:

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

它奏效了。对于这样的东西,Rails 对我来说仍然是个谜。从这篇文章中,答案是使用: :as => :foo

<%= render :partial => "projects/summary", :collection => @projects, :as => :project %>
于 2013-05-18T19:17:02.330 回答