0

我不确定我的代码有什么问题:

class ZombieController < ApplicationController
  def index
    @zombies = Zombie.all

    respond_to do |format|
        #format.json {render json: @rotting_zombies}
        format.html
    end

  end
end


class Zombie < ActiveRecord::Base
  attr_accessible  :name, :rotting, :age
  has_many :tweets
  has_one :brain, dependent: :destroy
  scope :rotting, where(rotting: true)
  scope :fresh, where("age < 30")
  scope :recent,order('created_at desc').limit(3)

end

class Brain < ActiveRecord::Base
  attr_accessible :flavor, :status, :zombie_id
  belongs_to :zombie
end

在 Zombie index 视图中,我将僵尸名称与大脑风味渲染如下:

<h1>List</h1>
<table>
<tr>
<td>Name</td>
<td></td>
<td>Flavor</td>
</tr>


<% @zombies.each do |zombie|%>
<tr>
    <td><%= zombie.name %></td>
    <td><%= zombie.brain.flavor %></td>
</tr>
<% end %>




</table>

我收到的错误是undefined methodnil:NilClass 的味道。这里可能有什么问题?据我所知,我正确定义了僵尸和大脑模型的关系。

4

1 回答 1

2

为了解决 Rails 试图从nil对象中获取属性的问题,有几种方法:

通过在视图中检查 nil

改变你的观点/僵尸/index.html.erb

<td><%= zombie.brain.flavor %></td>

<td><%= zombie.brain ? zombie.brain.flavor : "string with no brain here" %></td>

由代表

在你的 模型/zombie.rb

添加delegate :flavor, :to=>:brain, :prefix=>true, :allow_nil=>true

在您的views/zombies/index中,将行更改为

<td><%= zombie.brain_flavor %></td>

通过尝试()

谢谢@unnitallman

改变你的观点/僵尸/index.html.erb

<td><%= zombie.brain.flavor %></td>

<td><%= zombie.try(:brain).flavor %></td>
于 2013-06-19T04:07:02.197 回答