SystemStackError in MicropostsController#create

Cześć,
w trakcie przerabiania 11 rozdziału tutriala Hartl’a natknąłem się na następujący problem (wystąpił on po dodaniu walidacji obrazów):

SystemStackError in MicropostsController#create
stack level too deep

Extracted source (around line #79):
77
78
79
80
81
82
            
rescue Exception
  cleanup!
  raise
end

def prepare! #:nodoc:

Kod aplikacji znajduje się na githubie.

Ok już wiem. Nazwałeś metodę walidatora picture_size, a w metodzie picture_size robisz co? Wołasz picture_size. Nieskończona pętla. Zmień nazwę walidatora, np. na validate_picture_size i będzie banglać.

Dziękuję :smile:
sprawdzę za chwilę.

Wesołych świąt Lypa!

Got it. Błąd był dokładnie tutaj:

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

Problem wynikał stąd, że wcześniej w if’ie miałem picture_size, a nie picture.size

Skoro czytasz tutorial to pewnie Ci się przyda. Lepiej napisać to tak:

def picture_size
   errors.add(:picture, :error_name) if picture.size > 5.megabytes
end

‘:error_name’ - definiujesz w active_recordach ścieżkę znajdziesz w Google. :wink:

1 Like

Jest jakiś powód dlaczego napisać Twoim sposobem? Przejrzałem informacje w guides’ach RoR dot. walidacji (i błędów) oraz ActiveModel::Errors i oba wskazują na poprawność pierwszego rozwiązania.

A ścież ki do definiowania nie mogę znaleźć :smile: Google jest na mnie zły…

Twój zapis jest jak najbardziej w porządku, po prostu pokazałem jak można zrobić to lepiej.

W sumie to jeszcze lepiej by było tak, ponieważ error dotyczy parametru size.

def picture_size
   errors.add(:size, :error_name) if picture.size > 5.megabytes
end

https://gist.github.com/dareddov/ad6d896554efd646a172 tu masz Gista z kluczem do translacji. :wink:

1 Like

Senkju :smile: Wesołych świąt @Dareddov!