Relacje między obiektami

Witam
Poznaję Rubyego i zainteresowała mnie taka sprawa:
Generuję sobie dwa formularze za pomocą scaffold

  1. grupa nazwa:string
  2. user login:string grupa_id:integer

Modele:

[code]class User < ActiveRecord::Base
has_one :grupa
end

class Grupa < ActiveRecord::Base
has_many :users
end[/code]
Żeby to ze sobą połączyć modyfikuję plik plik migracji bazy danych i wygląda on tak:

[code]class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :login
t.integer :grupa_id, :null => false, :options => “CONSTRAINT fk_grupa REFERENCES grupas(id)”

  t.timestamps
end

end

def self.down
drop_table :users
end
end[/code]
Pliku z migracją dla tabeli grupa nie ruszam i wygląda tak jak powstał z generatora:

[code]class CreateGrupas < ActiveRecord::Migration
def self.up
create_table :grupas do |t|
t.string :nazwa

  t.timestamps
end

end

def self.down
drop_table :grupas
end
end[/code]
Teraz pytania:

  1. Czy jest jakiś sposób łączenia ze sobą tabel w bazie, czy trzeba to robić ręcznie?

  2. Zmodyfikowany widok formularza dla usera zawiera fragment:

[code]


<%= f.label :grupa_id %>

<%= f.select :grupa_id, “nie_wiem_co”, :prompt => “jaka grupa” %>
[/code] Co powinno znaleźć się w miejscu "nie_wiem_co", żeby pobrać grupy z bazy, wyświetlić ich nazwy w polu typu "select" i zapisać do bazy
  1. W user wpisałem “has_one :grupa”. Czy jest to OK, czy może powinno być belongs_to :grupa?

Dzięki
Pozdrawiam
Tomek

Ech …

Poszukaj sobie o relacjach w jakimś helpie może być w polskim od Apollo, skup się na fragmencie

belongs_to, has_many <- słowa klucze,

No i w ogóle zaczynasz Rails obejrzyj wszytskie rails casty, to podstawa:
http://railscasts.com/

Zacznij od 1 :]

Dzięki za podpowiedzi :slight_smile:
Działa tak jak chciałem, a prostota implementacji mnie powaliła.
Pozdrawiam
Tomek

I jeszcze jedno, nie nazywaj modelu “Grupa” tylko “Group”. “User has one grupa”, to brzmi jak “User has one dupa”. Sorry, nie mogłem się powstrzymać.

Tak wiem :slight_smile: