nil的未定义方法`full_name':NilClass

时间:2013-04-29 04:36:11

标签: ruby-on-rails ruby methods status

这是teamtreehouse.com上的练习。

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 %>

我真的很想了解原因。

4 个答案:

答案 0 :(得分:4)

你好,我猜你写错拼写

 User.rb file in model

has_many :statuses

请做正确的协会。

它是

<% statuses.user.full_name %> 

答案 1 :(得分:1)

问题在于,当我在用户部分之前构建状态部分时,我生成了没有first_name或last_name的测试状态。

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

答案 2 :(得分:1)

错误是因为某些记录没有其中一个名称,您可以使用以下代码避免错误。

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

如果full_name有效,则将字符串放入“”或“nil

的另一种方式

答案 3 :(得分:0)

在模型中添加属性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