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

时间:2015-09-05 10:00:07

标签: ruby-on-rails ruby

我已完成有关Micropost Images的章节。问题出现在第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'`打印广告恶心并填满我的控制台?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

if picture_size > 5.megabytes 

应该是

if picture.size > 5.megabytes

请注意.而不是_

我自己犯了错误。