【问题标题】:Render collection using a partial giving "undefined method for nil:NilClass"使用部分给出“nil:NilClass 的未定义方法”渲染集合
【发布时间】:2013-05-19 03:17:02
【问题描述】:

我正在尝试使用项目部分呈现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?

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您应该将您的部分更改为

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

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

    【讨论】:

    • 我从文档中看到了你所说的。我现在从同一行得到undefined local variable or method 'project'
    【解决方案2】:

    我发现了问题所在。

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

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

    它奏效了。对于这样的东西,Rails 对我来说仍然是个谜。来自this 的帖子,答案是使用: :as => :foo

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多