Rails rémálom

Egy ideje már foglalkozok Rails-szel, tehát nem vagyok kezdő. Úgy adódott, hogy egy profi Rails-es fejlesztő kódján kell dolgoznom. Rögtön megörültem, hogy láthatok ügyes megoldásokat. Ez így is történt, azzal az apró különbséggel, hogy az ügyes jelzőt idézőjelek közé kellene írnom. Rájöttem, hogy a profi minősítést saját magától kapta az illető.
Például:
Adott egy modell, amelyhez kapcsolódnak más modellek. Ezek elérése Rails-ben nagyon egyszerű, mivel ha definiálod a modellekben a kapcsolatokat, utána egy sor új metódus áll a rendelkezésedre amelyekkel egyik.kapcsolat_neve formában tudod elérni a kapcsolódó objektumokat.
Részlet egy általa alkotott view-ból, amely alapján az ember azt hinné, hogy az előbb említett Rails feature-ről még sosem hallott:

<% @notifications.each do |notification| %>
<%=h notification.description %>
<%=h (NotificationRule.find_by_id(notification.notification_rule_id)).description %>
<%=h (NotificationTemplate.find_by_id(notification.notification_template_id)).description %>
<% end %>

Ez így nézne ki szebben:

<% @notifications.each do |notification| %>
<%=h notification.description %>
<%=h notification.notification_rule.description %>
<%=h notification.notification_template.description %>
<% end %>

View-ba egyébként sem illik DB lekérdezéseket tenni, de az ő megoldása mindent visz szerintem azzal, hogy külön kérdezi le a kapcsolódó objektumokat.
További finomság, hogy az illető oktatja is a Rails-t, hosszú évek óta...
Újabb példa amelyen nyoma sincs a hosszú évek tapasztalatának amellyel saját állítása szerint bír az illető:
Ilyesmiket csinált minden lekérdezésben:

User.find(:first, "login = '#{params[:name]}' AND password = '#{params[:password]}'")

Ez a módszer az összes Rails-es könyvben és weboldalon mint elrettentő példa szerepel, mivel biztonsági rés. Ahhoz, hogy valaki ezt a hibás megoldást jó messziről elkerülje még végig sem kell olvasni egy Rails-es könyvet sem, mert rögtön az elején fel szokták erre hívni a figyelmet.
Helyes (és biztonságos) megoldás:

User.find(:first, :conditions => ["login = ? AND password = ?", params[:name], params[:password] )

Ha találkoztatok ti is hasonló hajmeresztő megoldásokkal Rails-es munkátok során, nyugodtan írjátok itt ki magatokból, ahogy én is tettem. ;-)
Talán kezdő Rails-eseknek hasznos lehet, a többiek pedig legalább megnyugodnak, hogy más is találkozik ennyire "profi" munkával.

Hozzászólások

Bár csak futólag volt dolgom Rails-szel (1-2 hétig játszottam vele), de ez azért durva.

Ilyen amikor a hozzá nem értés magabiztossággal párosul :(

+ szorgalommal ;-)
Eszembe jutott egy másik gyöngyszem. Egy helyen egy record szöveges mezőjét a szerkesztő formra rejtett mezővel kipakolta (!), aztán az elküldött form feldolgozásakor ezzel update-lte az adott rekordot.
Mikor kérdeztem, hogy mégis ezzel mi volt a célja, azt felelte, hogy így nem kell újra kiolvasni a DB-ből az értéket... Ezen azóta is gondolkozok, hogy hogyan jutott ez az eszébe...
Egyébként megkérdeztem a mestert minden ilyen húzásáról, hogy magyarázza már el miért ezt a megoldást választotta, mert én a kevés tudásommal nem értem ezeket a profi megoldásokat (szerény ember vagyok ;-)). Ezekre a kérdésekre sosem adott értelmes választ. Egyik alkalommal amikor már sokadszorra próbáltam meg kihúzni belőle értelmes választ, azt mondta, hogy a programozás bonyolult dolog, lehet hogy az ő megoldása nem tökéletes, lehet hogy én jobban tudnám megoldani, de a lényeg, hogy működik ;-)
Mondtam neki, hogy ez szép, de azért van némi különbség a szar, de azért működő és a jó és működő kód között.

Szerintem ne vitatkozz hülyékkel. A hülyék két ismérve, hogy nem lehet meggyőzni őket róla, hogy hülyék (rekurzív definíció!:) továbbá ha részletekbe mész, akkor lehúznak a szintjükre és ott lenyomnak a rutinjukkal. Felesleges időpazarlás csupán.

-=- Mire a programozó: "Na és szerintetek ki csinálta a káoszt?" -=-