Hartl Ruby on Rails教程第11章测试问题:错误信息填充控制台



我已经完成了关于微博图片的章节。问题出现在11.4节之后,当我运行bundle exec rake test时,我得到7个错误。我的控制台一直打印以下行到控制台的顶部:

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'

你懂的。这是一个令人头痛的问题,因为我甚至不能浏览控制台并找出我做错了什么或如何修复它。下面是app/models/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' '从打印出广告恶心和填充我的控制台?

你的picture_size方法是递归的,创建一个无限循环-它调用自己,它将无限地执行。

if picture_size > 5.megabytes是罪魁祸首,它调用了定义它的方法。如果这一行是正确的,那么您应该重命名实际的验证方法,例如,validate :picture_under_size_limitdef picture_under_size_limit

if picture_size > 5.megabytes 
应该

if picture.size > 5.megabytes

注意.而不是_

我自己也犯了那个错误。

最新更新