Przy wypisywaniu elementów modelu, który “belongs_to” jakiegoś innego modelu (np. kategorii), warto zabezpieczyć się przed brakiem zdefiniowanego obiektu nadrzędnego (lub po prostu brakiem obiektu o danym kluczu). Są do tego dwa podejścia w widokach:
costam.category.name if costam.category
costam.category.name unless costam.category.nil?
Oba są logicznie jak najbardziej poprawne w Ruby, jako że nil ewaluuje się (przepraszam za potworka, nie znam dobrego polskiego odpowiednika) do false w warunkach. 2) jest teoretycznie bardziej zrozumiały i oczywisty, ale wymaga klepania więcej kodu niż 1)
Tak na rozruszanie w sezonie ogórkowym, bo coś niemrawo na forum się zrobiło, jeśli nie liczyć wypisywania pluginów czy burzy wokół praktyk w pewnej firmie
Ja chyba wolę pierwszą wersję Ale zapewne jak piszę, to stosuję tego typu rzeczy zamiennie.
Sposób drugi może być dla niektórych cięższy do zrozumienia. Zawuażyłem, że początkującym czasami sprawia trudność unless. “Hmmm… unless, czyli przeciwność ifa… czyli, że to się wykona jak cośtam,category.nil? będzie nieprawdą, czyli nie będzie nilem… czyli… hmmm”
Mi sie bardziej podoba druga opcja. Jest bardziej czytelna.
Jedna z najbardziej niesamowitych rzeczy w Ruby jest to, ze mozna pisac i czytac kod zrodlowy jak ksiazke. A to miedzy innymi dzieki takim kontrukcja jak unless.
Chyba tylko początkującym, którzy słabo znają angielski ;)[/quote]
Pewnie tak. Ja tłumaczę sobie zawsze: “wykonaj instrukcję chyba, że category jest równe nil” i nie ma problemów.