Lista wyboru z pozycjami z bazy

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

Wydawnictwa
<%=option = [["Wybierz wydawnictwo", ""]] + @publishing_houses select("book", "id_wydawnictwa", option)%>

owszem dostaje tyle pozycji ile jest w bazie ale wyswietla krzaczory.

Tablica book i publishing_house sa polaczone polami id_wydawnictwa w books i id w publishing-houses. Korzystam z MySQL

Czy ktos moglby cos zasugerowac? Dziekuje

Wklej jak pobierasz wydawnictwa i jak generujesz tablice @publishing_houses

dane pobieram z bazy PublishingHouses.find(:all)

options_from_collection_for_select

albo

opts_for_ph = PublishingHouse.find(:all, :order => ‘name’).collect {|c| [c.name, c.id]}.unshift([“Wybierz wydawnictwo”, “”])

wielkie dzięki właśnie o to mnie chodziło 8)

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?

model promotor
model student

relacja 1 do wielu

promotor.students

a jak zrobić selecta z nimi?

f.select :aaa, [dane]

a miejsce dane

dane = promotor.students.collect { |c|
[
c.name
]
}

czy co tam potrzebujesz

nie rozumiem za bardzo co oznacza promotor i students…

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.

promotor = Promotor.find(:id)
studenci_promotora = promotor.students.all

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.

student

belongs_to :promoter :class_name => “User”, :foreign_key => “id_promoter”

Dla profesora robisz odwrotne has_many. Podręcznikowy przykład. A “id_promoter” zmieniłbym na “promoter_id”, żeby trzymać się konwencji

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:

http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M001887&name=belongs_to

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ć.

No ok, ale w dalszym ciągu nie wiem w jaki sposób stworzyć kolekcję studentow, którzy nalezą do promotora…

http://www.apohllo.pl/guides/association_basics.html