这是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 %>
我真的很想了解原因。
答案 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