2013-04-29 203 views
-2

這是對teamtreehouse.com的練習。未定義的方法`full_name'爲零:NilClass

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

我真的很想知道爲什麼。

回答

1

的問題是,當我之前的用戶部分構建狀態部分,我已經生成的測試的狀態那沒有first_name或last_name。

修復它是打開軌道控制檯類型的方式:rails console然後Status.delete_all

+0

感謝您花時間發佈此答案!拯救生命! – Starkers 2013-09-08 00:32:23

4

你好,我想你做了拼寫錯誤書寫

User.rb file in model 

has_many :statuses 

請做適當的關聯。

它是

<% statuses.user.full_name %> 
+0

我還以爲你在寫的複數和Ruby可以理解???也做了它只是爲了它,它確實返回一個錯誤,將其更改爲狀態。 – Jadam 2013-04-29 04:58:28

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 
+1

不應該是'attr_accessor'而不是'attr_accessible' – Viren 2013-04-30 14:45:11

1

這個錯誤是因爲一些記錄不具有名稱之一,你可以使用下面的代碼避免錯誤。

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

如果FULL_NAME的作品,它把字符串中,它把其他的方式「」或零

相關問題