Jak wyświetlić poszczególne składowe obiektu?

Witam,
Podczas mojej krótkiej przygody z Ruby’m napotkałem problem z którym nie mogę sobie poradzić:
Jak mogę wyświetlić poszczególne składowe obiektu?

Zrobiłem sobie funkcję w hellperze, która pobiera poszczególne dane z określonych tabel i zapisuję je jako obiekt nowej klasy. Następnie chciałbym w widoku odwołać się do konkretnej właściwości obiektu.

Na początku próbowałem czegoś takiego (w widoku):

p Dane 
p ID <%= @pracownik.idPracownika %>
p Imie <%= @pracownik.Imie %>
p Nazwisko <%= @pracownik.Nazwisko %>
p Wynagrodzenie <%= @pracownik.Wynagrodzenie %>
p Stanowisko <%= @pracownik.Stanowisko %>
p Mail  <%= @pracownik.Mail %>

Taki kod interpreter tratktuje jako zwykły tekst, odwołanie w stylu “=@obiekt.wlasciwosc” z kolei jest interpretowane jako próba wywołania metody.

Próbowałem też z funkcją inspect, ale to zwraca mi wszystko jak leci, a nie tego oczekuję. Chyba, że w inspect da się jakoś sparametryzować to co chcę żeby wyświetlił?

Alternatywnie myślałem też o zdefiniowaniu w controlerze zmiennych, które zawierały by składowe mojego obiektu, ale tam również mam problem z odwołaniem się do konkretnego parametru (np. interesuje mnie tylko e-mail i Nazwisko).

Bardzo proszę o pomoc bo już wyrywam sobie włosy z głowy :wink:

Jakiego typu szablonów używasz? Erb (.html.erb) czy Haml (.html.haml)?

.html.slim :slight_smile:

Nie używałem nigdy slima, ale po chwili obcowania z przykładem na stronie głównej widzę, że żeby osadzić dynamiczną wartość pobranę ze zmiennej/metody obiektu trzeba robić to tak:

p = user.name

Na jakiej więc podstawie wklejasz kod żywcem wyjęty z erba? Czy zaglądałeś w ogóle do dokumentacji?

U Ciebie będzie zatem coś w stylu:

p
  | Imie:
  = @pracownik.Imie

albo

p
  | Imie: #{@pracownik.Imie}

Zakładając oczywiście, że posiadasz w widoku dostęp do zmiennej @pracownik oraz zmienna ta wskazuje na obiekt posiadający metodę Imie. Jeśli jesteś zupełnie początkującym w programowaniu to język polski można jeszcze zaakceptować, natomiast nazwy atrybutów/metod pisanych wielką literą nie. Pomimo tego, że Ruby pozwala na takie metody to prosisz się tylko o kłopoty. Szablony slim też bym Ci odradzał z uwagi na o wiele mniejszą adaptację od erba i hamla. Dla początkującego najprościej chyba będzie pozostać przy domyślnym dla railsów erbie.

Dzięki za odpowiedź,
No cóż wybór Slim’a nie był moim wyborem, ale to dłuższa historia (od razu mówię, że nie jest to nic komercyjnego - aplikacja na studia). Prawdę mówiąc Ty mnie uświadomiłeś, że korzystam z “niestandardowego” rozwiązania ponieważ ja słyszałem o haml’u i erb, a nie wiedziałem tak na prawdę co mam skonfigurowane…

Nie do końca rozumiem: Czyli nie mogę się tak po prostu odwołać do właściwości “Imie” obiektu Pracownik, tylko muszę zdefiniować metodę o tej nazwie, która będzie zwracała Imie dla danego Pracownika?

Oj radziłbym zacząć najpierw od rubiego bo widzę tu spore braki ;-). W rubym obiekt, patrząc z zewnątrz, posiada tylko metody. Nie ma podziału, jak np. w javie, na pola i metody. Zapis obiekt.name jest równoważne obiekt.name(), jednak dla metod bezparametrowych przyjęło się nie stosować nawiasów. Obiekt swój stan zapisuje wewnętrznie w zmiennych instancyjnych (np. @name). Istnienie zmiennej instancyjnej nie jest równoważne istnieniu metody o takiej nazwie i odwrotnie.

Ponieważ często jednak chcemy dać dostęp do zmiennych instancyjnych z zewnątrz to ruby dostarcza gotowej helpery typu attr_accessor, attr_reader, attr_writer, które wygenerują za nas kod.

Zamiast pisać:

class User
  def name
    @name
  end

  def name=(name)
    @name = name
  end
end

wystarczy

class User
  attr_accessor :name
end

Najważniejsze do zapamiętania: jeśli widzisz zapis foo.bar to bar jest na pewno metodą. Nie ma innej możliwości.

1 Like

Wielkie dzięki za obszerne wyjaśnienie! :smile:
Z Twoją pomocą osiągnąłem efekt jaki oczekiwałem i przede wszystkim zrozumiałem podejście Ruby’ego w tej materii :wink:
Mam jeszcze pytanko do Ciebie, mam nadzieję, że moderatorzy wybaczą lekki offtop:
Czy polecasz jakieś książki na temat Ruby’ego, Ruby On Rails dla początkujących? Czy może jednak sam poznając tą technologię korzystałeś po prostu z dokumentacji i przykładów w internecie?

Pozdrawiam.

Najlepszy na start w samych Railsach jest Rails Tutorial Hartla

Ew. sprawdź Agile Web Development with Rails