Czesc. Pisze ksiegarnie internetowa to moj pierwszy projekt w Rubym. Problem jest nastepujacy. Przy dodawaniu nowej ksiazki chcialbym, aby w formularzu wyswietlana byla lista wyboru wydawnictw ale nie z sztywnej tablicy (jak np. przy kategoriach) tylko pozycje do wyboru maja byc pobierane z innej tablicy bazy danych. Probowalem w ten sposob
Mam tak: opts_for_ph = User.find(:all, :order => ‘name’).collect {|c| [c.name, c.id]}.unshift([“Wybierz”, “”])
To moja tabela Users: t.string "login"
t.string "email"
t.string "crypted_password", :limit => 40
t.string "salt", :limit => 40
t.datetime "created_at"
t.datetime "updated_at"
t.string "remember_token"
t.datetime "remember_token_expires_at"
t.string "name"
t.string "last_name"
t.string "role"
t.integer "id_promoter"
Sa to albo promotorzy albo studenci. I teraz chce aby w select’e wyswietlilo mi tych studentow, ktorzy sa przypisani do promotora? Czy ktos wie jak rozwiazac ten problem?
No jak dla mnie powinieneś mieę tabele, model, czy jak to chcesz nazywać Promotor i tam promotorów wpisanych, Tak samo Student i tam studentów wpisanych. Ustawioną relację między nimi. i wtedy możesz pytać tak mniej więcej.
i wtedy jako studenci_promotora masz kolekcje jaka cię interesuje. Możesz ją zmapować by mieć tablice naziwsk, id czy co tam chcesz do formularza i tyle.
Coś automatycznego i fajnego do formularzy jak formastic form czy jak to się nazywało zrobi ci to z automatu.
No ale pewnie masz źle zaprojektowana bazę danych i stąd problem?
No ja mam tabele Users:t.string "login"
t.string "email"
t.string "crypted_password", :limit => 40
t.string "salt", :limit => 40
t.datetime "created_at"
t.datetime "updated_at"
t.string "remember_token"
t.datetime "remember_token_expires_at"
t.string "name"
t.string "last_name"
t.string "role"
t.integer "id_promoter"
I tutaj sa i promotorzy i studenci. Student ma wpisany id_promotora, a promotor ma te pole puste. I jeszcze rola, tak odróżniam czy to promotor czy student, wiec nie moge zrobic tak jak napisales.
To albo ja czegoś nie rozumiem albo nie wiem. Dopiero uczę się Rails także wybaczcie. W takim razie nawet jeżeli nie mam oddzielnych modeli dla promotora i studenta to mogę tak zrobić? Co w takim wypadku oznacza ‘:promoter’?
Tak, możesz to zrobić na jednym modelu. A Twoje pytanie co oznacza :promoter oznacza, że nie czytasz dokumentacji, Być może nie wiesz, że ona istnieje, dlatego dostajesz link do wyjaśnienia jak działa belongs_to, z czego wywnioskujesz co to jest :promoter i jak dopisać do tego has_many:
Można tak ale lepiej nie, Zrób dwa oddzielne modele, jedna tabela w bazie z promotorami, druga ze studentami, to sporo ci ułatwi na pewno, szczególnie jak się uczysz dopiero. Nie wiem na ile znasz SQL ale te has_many i belongs_to, po prostu mówią railsom (AR) jak mają zrobić złączenie. Najlepiej zobacz kilka, a jak masz czas tak ze 100 pierwszych na pewno railscasts, powinno ci się rozjaśnić.