0

这是 teamtreehouse.com 上的一个练习。

用户.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

状态.rb

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

我收到以下错误。

undefined method 'full_name' for nil:NilClass

显示第 9 行引发的 /app/views/statuses/index.html.erb :

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

4 回答 4

4

你好,我猜你写错了

 User.rb file in model

has_many :statuses

请做适当的关联。

它是

<% statuses.user.full_name %> 
于 2013-04-29T04:46:50.120 回答
1

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

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

如果 full_name 有效,它会将字符串以另一种方式放置“”或 nil

于 2013-08-06T18:22:07.847 回答
1

问题是,当我在用户部分之前构建状态部分时,我生成了没有名字或姓氏的测试状态。

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

于 2013-04-30T01:13:30.603 回答
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
于 2013-04-29T06:18:26.820 回答