Ciekawi mnie jak sie zabezpieczacie przed zbyt dlugimi wpisami.
Zalozmy ze piszemy aplikacje publicznie dostepna, na przyklad forum dyskusyjne, bloga z opcja komentowania czy tym podobne historie.
Jak najsensowniej zabezpieczyc sie przed wpisami typu [quote]Baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarddzooooooooooooooooooooooooooooo_dluuuuuuuuugi___wpiiiiiiiis[/quote]
, chodzi o to zeby silnik aplikacji automatycznie wlozyl w to jakiegos .
Szukalem, znalazlem pare rozwiazan na gsub, metoda word_wrap to nie to czego mozna by oczekiwac, jakies pomysly na sprytne rozwiazanie problemu ?
protected
def reject_long_words
errors.add_to_base(“Treść zawiera słowa dłuźsze niż 25 znaków”) if self.body && self.body.split(’ ').find {|x| x.length > 25}
end
end[/code]
@hosiawak, rozumiem idee, ale jak to zrobic zeby nie trzebabylo do kazdego modelu osobno dodawac ? Juz przy prostej spolecznosciowce masz powiedzmy okolo 10 modeli, z czego wiekszosc moze miec pola typu :title i :content co daje 10 x 2 = ~20 mozliwosci popelnienia tej szatanskiej zbrodni.
Mysle ze problem jest o tyle uniwersalny ze jego rozwiazanie przydaloby sie rozwiazac z glowa i umieszczac w kazdej aplikacji, gdzie uzytkownik moze dodac cos “od serca”
Mozna by z automatu wyciagac atrybuty modelu i kazdy z nich sprawdzac z rowniez z automatu, ale problem w tym ze czasem masz pole chocby na url, gdzie wartosc moze byc bardzo dluga i wtedy klops, to pole trza przepuscic
Wiec moze odgornie filtrowaac zbyt dlugie dane, a pomijac walidacje atrybutow, ktore sa w jakis sposob oznaczone ? (W jaki ? )
Jeśli jest :except to przydałoby się też :only
Poza tym zmieniłbym nazwę z acts_as_shorty na validates_long_words albo chociaż validates_as_shorty.
Ten plugin nie dodaje żadnej funkcjonalności do modelu poza walidacją.
IMHO powinno być tak:
class Model
validates_long_words :title, :description
end
czyli jawne określenie jakie kolumny mają być sprawdzane. Interfejs podobny do reszty metod validates_* a poza tym domyślne sprawdzanie (jeśli nie określisz kolumny) dla większości kolumn w większości tabel nie będzie miało sensu (to że kolumna ma typ string lub text nie oznacza automatycznie że chcesz poddać ją walidacji, a w Twoim pluginie tak jest).