47.11.2. Vztahy mezi tabulkami (relace)

V naší databázi máme více tabulek, mezi kterými jsou vztahy. Představme si například databázi jednoduchého blogu, ve které máme tyto dvě tabulky:

class Post < ActiveRecord::Base
end
class Person < ActiveRecord::Base
end

Mezi těmito tabulkami existuje přirozený vztah daný tím, že každý příspěvek (Post) má jen jednoho autora (Person) a každý autor může mít více příspěvků. Je to vztah 1 ku n, (one to many). Takový vztah popíšeme příkazy has_many (má více) a belongs_to (patří k). V našem případě příspěvek (Post) patří k (belongs_to) člověku (Person). A obráceně Člověk (Person) má více (has_many) příspěvků (posts). V modelu to vypadá takto:

class Person < ActiveRecord
    has_many :posts
end
class Post < ActiveRecord
    belongs_to :person
end

To odpovídá databázi:

CREATE TABLE person (
    id SERIAL,
    first_name VARCHAR(30),
    last_name VARCHAR(30),
    ⋮
);
CREATE TABLE post (
    id SERIAL,
    person_id INTEGER,
    title VARCHAR(250),
    content TEXT,
    ⋮
); 

WORKING: Editovat.

belongs_to :author, :class_name => 'Person', :foreign_key => 'author_id'
has_many :posts, :foreign_key => 'author_id'
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .