Komunikacja między tabelami

Hej,
mam tablice, ktora wyglada mniej wiecej w taki sposob:

things:
:day: dayName
:events:

  • !ruby/object:Event
    attributes:
    title: whatever
    date: 2007-11-11 13:04:49
    id: “1”
    description: HELLO
    company_id: “0”
    user_id: “0”
    city_id: “1”
    :day_class: day

w jaki sposob moge “dostac się” do :title? chcialem najprosciej: things[:events[:title]] ale nie dziala.

Help

Jak na mój gust to title nie jest kluczem tablicy haszującej (rozumiem, że to masz na myśli mówiąc o tabelach), tylko atrybutem obiektu event, który znajduje się w tablicy hashującej things.

Jeśli o to chodzi, to powinieneś użyć składni things[:events].title

W pierwszym wywołaniu odwołujesz się do obiektu, który w haszu things ukrywa się pod kluczem
:events, operator kropkowy pozwala Ci natomiast wydobyć atrybut title tego obiektu

Jeszcze jedna uwaga: w tego rodzaju przypadkach warto jest popróbować
zachowanie Rubiego w konsoli. Można wtedy bardzo szybko dojść do właściwego
rozwiązania.

Aby odpalić konsolę Rubiego wystarczy wpisać:

irb

Z przydatnych poleceń warto wymienić:
object.inspect - dokonuje ‘inspekcji’ obiektu, tzn. wyświetla wartości jego pól, etc.
object.methods - wypisuje wszystkie metody dostępne dla danego obiektu

To drugie warto stosować w następujący sposób

(object.methods - Object.methods).sort

Poznajemy wtedy metody specyficzne dla obiektu object. Jak przetestujesz każdą
z nich to możesz dużo dowiedzieć się o tym do czego one służą.

Srednio dziala, gdy wpisuje things[:events].title. Wyskakuje blad:
undefined method `title’ for []:Array

A z ta konsola rubego, to jak powieniennem dostac sie do konkretnej klasy, albo helpera, ktory mnie interesuje?

[quote=szef]Srednio dziala, gdy wpisuje things[:events].title. Wyskakuje blad:
undefined method `title’ for []:Array[/quote]
a nie things[:events].first.title ?

Works, dzieki wielkie:)

To zależy jaka dokładnie klasa Cię interesuje. Klasy wbudowane (typu Array, Hash, etc.) dostępne są od zaraz, tzn. możesz napisać

a = Array.new a.inspect ...
Niektóre klasy rozprowadzane z Rubim dostępne są po załadowaniu odpowiedniego pakietu, np.

require 'rexml/node' n = REXML::Node.new n.inspect
Jeśli zaś chodzi Ci o klasy zdefiniowane w Twojej aplikacji Rails to trzeba wywołać skrypt
script/console, który ładuje irb razem z wszystkimi klasami Twojej aplikacji.