Witam,
stworzyłem szablon dokumentu do wydruku, stosowne pola są zapełniane wartościami z bazy, ale często występuje sytuacja, że w bazie nie ma kompletu danych. W takim przypadku w szablonie powinny pojawić się kropki ("…"*10), żeby po wydruku była możliwość ręcznego uzupełnienia dokumentu.
taki kod:
class Specification < ActiveRecord::Base
def tolerance
read_attribute(:tolerance) or 'n/a'
end
end
W moim przypadku powyższy kod musiałbym powtórzyć dla każdego pola. Jak tego uniknąć?
Z góry dzięki za pomoc
[:failure, :error, :success].each do |method|
define_method method do
read_attribute(method) || '...'
end
end
Ewentualnie samo define_method możesz sobie zamknąć w eleganckie makro (default_dotted_attribute :failure)
Czytelność kodu jest bardzo ważna ale nie można popadać z jednej skrajności w drugą. Czemu nie chcesz ustawić wartości domyślnej na polu w bazie w migracji, skoro to najlepsze (imo) i najprostsze rozwiązanie? Użytkownicy i tak wrzucają takie cuda w formularze, że gwarantuję Ci iż porządku tam długo nie utrzymasz.
Moim zdaniem te kropki to nie mają nic wspólnego z modelem więc totalnie bym odrzucił pomysł wkładania tam jakiejkolwiek logiki z tym związanej. Zrób sobie helpera może, który użyje sprintf by dopełnić kropkami do N znaków. Logika widoku => helper (ewentualnie właśnie presenter).
Czytelność kodu jest bardzo ważna ale nie można popadać z jednej skrajności w drugą. Czemu nie chcesz ustawić wartości domyślnej na polu w bazie w migracji, skoro to najlepsze (imo) i najprostsze rozwiązanie? Użytkownicy i tak wrzucają takie cuda w formularze, że gwarantuję Ci iż porządku tam długo nie utrzymasz.
wstyd będzie pokazać komuś kropki w bazie, szczególnie że one mają tylko reprezentować null a nie go zastępować.
Realizacja tego na poziomie modelu (mój pierwszy pomysł) rzeczywiście mija się z celem, bo to nic wspólnego z modelem nie ma, a może zaszkodzić w przyszłości.
Optymalnym wydaje się widok / meta-helper, ciekawe czy mi coś z tego wyjdzie.
To na koniec żenujący dowcip pytającego (w stylu umiarkowanie-szowinistycznym):
Niewidomy mężczyzna wchodzi przez pomyłkę do baru dla lesbijek, odnajduje drogę do baru i zamawia drinka. Po chwili zagaduje barmankę:
Hej, opowiedzieć ci kawał o blondynce?
W barze zapada cisza. Kobieta siedząca obok niego mówi:
Zanim opowiesz ten kawał, powinieneś coś wiedzieć. Barmanka jest blondynką, ochroniarz jest blondynką i ja też jestem blondynką z czarnym pasem karate. Poza tym kobieta, która siedzi obok mnie, jest kulturystką, a dziewczyna po twojej prawej stronie zapaśniczką. Nadal chcesz opowiedzieć ten dowcip?
Niewidomy zastanawia się chwilę i odpowiada:
Przepraszam, za szybko przeskanowałem pierwszy post, i dałem odpowiedź na zadane pytanie. Myślałem że chodzi o jedna konkretną wartość (np. “N/A”), która miała reprezentowac brak danych.
To co ty chcesz zrobić, poprawnie należy zrobić przez użycie atrybutu placeholder w tagu input. Nie trzeba generować żadnych dodatkowych cudów, po prostu dodajemy:
Dostaniesz dokładnie to co oczekujesz w druku, jednocześnie nie tykając ani helperów, ani nie modyfikując formularzy, ani nie niszcząc UI dla klientów z neta?