我正在使用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:reset
和rake db:migrate
但似乎没有解决错误问题。谢谢你的帮助!
答案 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_id
为nil
。
将值设置为现有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