2015-09-05 99 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 

注意.代替_

只是犯了那个错误我自己。

相关问题