2015-09-05 97 views
0

我已完成Micropost圖像的一章。問題出現在11.4節之後,當我運行bundle exec rake test時,我得到7個錯誤。我的控制檯一直打印到控制檯頂部的以下行:Hartl Ruby on Rails教程第11章測試問題:填寫控制檯的錯誤信息

app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 
app/models/micropost.rb:13:in `picture_size' 

您明白了。這令人頭痛,因爲我甚至無法通過控制檯並找出我做錯了什麼或如何解決它。如果它是相關的,下面是代碼的應用程序/模型/ micropost.rb

class Micropost < ActiveRecord::Base 
    belongs_to :user 
    default_scope -> { order(created_at: :desc) } 
    mount_uploader :picture, PictureUploader 
    validates :user_id, presence: true 
    validates :content, presence: true, length: { maximum: 140 } 
    validate :picture_size 

    private 

    # Validates the size 
    def picture_size 
     if picture_size > 5.megabytes 
      errors.add(:picture, "should be less than 5MB") 
     end 
    end 
end 

我的問題是如何阻止app/models/micropost.rb:13:in picture_size'`從打印出廣告nauseum並填補了我的控制檯?

回答

1

您的picture_size方法是遞歸的,創建一個無限循環 - 它自己調用它,它將無限地執行。

if picture_size > 5.megabytes是罪魁禍首,這就要求它在定義的方法。如果該行是正確的,那麼你應該重新命名的實際驗證方法,例如,validate :picture_under_size_limitdef picture_under_size_limit

+0

我實際上剛剛發現它是什麼,在他寫的「驗證:picture_size」的書中,而它應該是「驗證」。我的noob-self沒有處理錯別字錯誤。 –

+0

@LesPaul不,這不是一個錯字。 'validate'用於自定義驗證方法,就像你寫的那樣。 – sevenseacat

+0

那麼爲什麼當我將它改爲「驗證」時,我是否擺脫了所有這些錯誤? –

0
if picture_size > 5.megabytes 

應該

if picture.size > 5.megabytes 

注意.代替_

只是犯了那個錯誤我自己。

相關問題