未定义的方法`full_name'为零:NilClass

问题描述:

这是对teamtreehouse.com的练习。未定义的方法`full_name'为零:NilClass

user.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me, 
        :first_name, :last_name, :profile_name 

    validates :first_name, presence: true 

    validates :last_name, presence: true 

    validates :profile_name, presence: true, 
          uniqueness: true 

    has_many :statuses 

    def full_name 
    first_name + " " + last_name 
    end 
end 

status.rb

class Status < ActiveRecord::Base 
    attr_accessible :content, :user_id 
    belongs_to :user 
end 

,我发现了以下错误。

undefined method 'full_name' for nil:NilClass 

显示/app/views/statuses/index.html.erb在行#9提出:

6: 
7: <% @statuses.each do |status| %> 
8: <div class="status"> 
9: <strong><%= status.user.full_name %></strong> 
10:  <p><%= status.content %></p> 
11:  <div class="meta"> 
12:  <%= link_to time_ago_in_words(status.created_at) + " ago", status %> 

我真的很想知道为什么。

的问题是,当我之前的用户部分构建状态部分,我已经生成的测试的状态那没有first_name或last_name。

修复它是打开轨道控制台类型的方式:rails console然后Status.delete_all

+0

感谢您花时间发布此答案!拯救生命! – Starkers 2013-09-08 00:32:23

你好,我想你做了拼写错误书写

User.rb file in model 

has_many :statuses 

请做适当的关联。

它是

<% statuses.user.full_name %> 
+0

我还以为你在写的复数和Ruby可以理解???也做了它只是为了它,它确实返回一个错误,将其更改为状态。 – Jadam 2013-04-29 04:58:28

添加属性full_name在模型中。

attr_accessible :full_name 

然后更新

def full_name 
    first_name + " " + last_name 
    end 

如下,

def full_name 
    self.full_name = self.first_name + " " + self.last_name 
    end 
+1

不应该是'attr_accessor'而不是'attr_accessible' – Viren 2013-04-30 14:45:11

这个错误是因为一些记录不具有名称之一,你可以使用下面的代码避免错误。

<%= status.user.try(:full_name) %> 

如果FULL_NAME的作品,它把字符串中,它把其他的方式“”或零