在状态#sta中获取NoMethodError

时间:2014-03-23 12:58:07

标签: ruby-on-rails ruby

我正在使用Ruby on Rails构建一个社交媒体网站,我正在遵循teamtreehouse.com的指示。每当我创建新状态或进入索引页面时,我都会收到此消息

undefined method `full_name' for nil:NilClass

  <p>
    <strong>Name:</strong>
    <%= @status.user.full_name %>
  </p>

我将我的页面编码为显示全名

<%= @status.user.full_name %>

<%= status.user.full_name %>

索引页。

我已将所有这些代码片段都包含在我的项目中

status.rb

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

user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :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
  # attr_accessible :title, :body

  def full_name 
    first_name + " " + last_name
  end
end

我尝试过使用rake db:resetrake db:migrate但似乎没有解决错误问题。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

根据错误,

undefined method `full_name' for nil:NilClass

这意味着

@status.user = nil

即,您正在查看的特定状态实例(@status)没有关联的用户记录。

您可以转到rails console

进行验证
Status.find(pass_the_id)   ## pass the id of @status instance

您会注意到该记录user_idnil

将值设置为现有user_id,然后重试。

注意: 您可能需要深入了解如何在应用中存储状态。我想你缺少在那里存储user_id属性

答案 1 :(得分:0)

您似乎需要在has_many :statuses模型中加入User

您可能还希望使用.delegate()方法:

class Status < ActiveRecord::Base
    attr_accessible :content, :user_id

    belongs_to :user
    delegate :full_name, to :user, prefix: :author
end

这应该允许您拨打@status.author_full_name