Szukam narzędzia ORM dla Ruby , tabelki z bazy zamienić na klasy

Witam

Na razie mam bardzo małą wiedzę o Rubym , dlatego moje pytania mogą być głupie.

Czy jest jakieś narzędzie w ROR , które z tabelek w bazie wygeneruje mi klasy modelu?
Jak na razie czytałem o ActiveRecord , to tam jest chyba odmienne podejście i z klas wygeneruje mi bazę za pomocą rake migration.
Ja jednak należę do tych osób co SQL’a się nie boją , bazę zawsze sobie chętnie projektuję i tylko potrzebuje by mi wygenerowało klasy . Jak to zrobić ?

Pozdrawiam i z góry dziękuję za odpowiedzi.

Klasy mapujące tabelę z bazy na obiekt same odczytują informacje z bazy o polach i ich typach. Dlatego jeśli masz już gotowe tabelki to dla każdej wystarczy, że utworzysz odpowiedni plik w katalogu app/models z klasą modelu (model.rb):

class MójModel < ActiveRecord::Base end
Napisanie skryptu, który to zautomatyzuje nie powinno być większym problemem. Do tego dokładasz deklaracje relacyjne (has_many, has_one itp), walidatory etc.

Ale… To by było zbyt piękne, żeby było tak proste. Pytania zasadnicze: czy projektując bazę postępowałeś zgodnie z konwencją railsów? Nazwy tabel w liczbie mnogiej, klucz główny o nazwie ‘id’, klucze obce w postaci ‘obca_tabela_w_lp_id’ itp. Jeśli nie, to jeśli masz możliwość to przeprojektuj sobie bazę (ten temat był nieraz poruszany na forum) bo nie ma większego sensu by to railsy dostosowywać pod nią.

To odmienne podejście nie tylko sprawia, że nie dłubiesz przy sql. Chodzi też o to, że każda zmiana w bazie jest zdefiniowana jako pojedynczy krok. Dzięki temu gdy nad projektem pracuje kilka osób (> 1) zmiany w bazie przeprowadzane są płynnie i automatycznie (a nie na zasadzie “wklepcie sobie te instrukcje sql od linijki 100 do końca…”). Same pliki klas nie są generowane przez migracje (zauważ, że po wydaniu polecenia “ruby script/generate model” powstaje zarówno plik z modelem oraz migracją).

Projekt bazy, a późniejsze go przełożenie na zapytania SQL to dwie różne rzeczy. Jeśli tak bardzo lubisz pracować na zapytaniach SQL to nie ma problemu.

ActiveRecord::Base.connection.execute("twój kod sql")

Wierz mi, że jednak tego nie chcesz ;).

OK, czyli przeprojektuję bazę zgodnie z zaleceniami.
A pytanie między innymi chodziło mi o skrypt automatyzujący te czynności, bo 50 tabel różnie połączonych relacjami to trochę wklepywanie jest.
Znalazłem takie cudo jak http://magicmodels.rubyforge.org/magic_model_generator/ , i chyba tym pojadę. Szczególnie że ten MagicModel bliżej odpowiada temu co poznałem z (N)Hibernate, niż czysty ActiveRecord.

A co takiego, prócz tego, że nie musisz deklarować klas modeli ręcznie, ten MagicModel daje?

Jest już generator i nie muszę ręcznie relacji i walidacji wpisywać . Z natury jestem leniwy .

Bardzo dobrze, że jesteś leniwy :). Rozumiem, że walidacje generuje na podstawie opisu pól w bazie? (np. długość stringa, not null itp). Jeśli tak to w sumie niewiele, bo raczej zawsze jest potrzebna walidacją, która stanowi pewną logikę biznesową i której z bazy nie wyciągnie. Ale lepsze to niż nic :).