Albo zrobić jeden model zamiast dwóch?
Np. tylko Ticket, do którego dodać pole :confirmed => :boolean
Jeśli Ticket.confirmed == false, to jest to rezerwacja, a jeśli true, to pełnoprawny bilet.
[quote=Bragi](Ticket.columns.map(&:name) & Reservation.columns.map(&:name)) - ["id"]
[/quote]
Tutaj też da się prościej (lepiej jednak użyć attributes):
[quote=sabon]Albo zrobić jeden model zamiast dwóch?
Np. tylko Ticket, do którego dodać pole :confirmed => :boolean
Jeśli Ticket.confirmed == false, to jest to rezerwacja, a jeśli true, to pełnoprawny bilet.[/quote]
Albo wykorzystać maszynę stanową lub STI. Możliwości jest mnóstwo, nie wiadomo tylko co chcemy uzyskać ;-).
Chce mieć dwa modele, choćby dla counter cache
W momencie opłacenia rezerwacji powstaje bilet, łatwiej zliczyć istniejące bilety i rezerwacje przez counter cache w modelu event. Niż klepać sumy z warunkami. (tak mnie się przynajmniej zdaje
event = Event.orders.tickets.all[/code]
A można pewnie jakoś pobawić się has_many, albo named scopami, zeby pisać Event.tickets.count albo Event.reservations.count
Poza tym masz jeszcze dziedziczenie modeli.
Kopiowanie atrybutów w tym wypadku wydaje mi się nieeleganckie i powolne. IMHO kłóci się to trochę z obiektowością. Pomyśl, czym jest dla Ciebie rezerwacja i co sprawia, że staje się biletem.
ALe jak ktoś napisał, jest wiele rozwiązań jednego problemu