Validations To Skip

Tak w celu lepszego poznanie railsów “od kuchni” postanowiłem napisać prostego plug-ina umożliwiającego omijanie niektórych walidacji.

Chwilę myślałem jak to zrobić, tak aby rozwiązanie było jak najbardziej uniwersalne (obsługa własnych, niestandardowych walidacji itp). Obecnie kod wygląda +/- tak, nie jestem z niego zbyt zadowolony. Najwięcej problemu przysporzyło mi odpalanie tej mojej funkcji. Aktualny sposób nie jest za dobry: nie wiadomo jak będzie zachowywał się skrypt gdy użytkownik doda własną funkcję podpiętą pod after_validation, nie działa metoda #valid? (!) (nie jest wywoływany odpowiedni callback) itd.

Ma ktoś lepszy pomysł jak to technicznie rozwiązać? Proszę o podanie tylko schematu, zapisaniem ja się zajmę :wink:

[code=ruby]class ActiveRecord::Errors

def delete(attribute)
@errors.delete(attribute.to_s)
end

end

class ActiveRecord::Base

after_validation :skip_marked_validations

def validations_to_skip!(*attributes)
@validations_to_skip = attributes.to_a || []
end

def skip_marked_validations
@validations_to_skip ||= []

@validations_to_skip.each do |attribute|
  errors.delete(attribute)
end

end

end[/code]

Szczerze mówiąc to wydaje mi się, że podchodzisz do tematu trochę od tyłu. Wydaje mi się, że to tak trochę jest jakby wjeżdżać autem w ścianę tylko po to, żeby je później wyklepać. Nie chodzi mi o sam kod tylko o idee. Skoro chcesz żeby system pomijał walidację to zrób to zanim ją przeprowadzisz. Polecam railscasta