Ma_many w Railsach, przypisując różne role
Próbuję stworzyć relację między adresami a wycieczkami i nie jestem pewien, jak dokładnie nawiązać relację.
Każda podróż będzie miała dwa adresy: adres początkowy i adres końcowy. Adresy mogą być używane w wielu różnych podróżach i mogą to być adres początkowy lub adres końcowy w zależności od podróży. Wyobrażam sobie, że gdy użytkownicy tworzą nową podróż, mogą wybrać z listy rozwijanej wszystkich swoich adresów, aby mogli odbyć podróż z adresu zwanego „domem” na adres, na przykład „lotnisko”. „
Istnieje już powiązanie polimorficzne między adresami (jako lokalizowalne) z niektórymi innymi modelami w aplikacji, ale w tym przypadku ten sam adres musi należeć do dwóch różnych modeli (użytkownika i podróży). Czy polimorficzna tabela łączenia będzie dobrym rozwiązaniem? Nawet jeśli to rozwiązałoby problem, po połączeniu dwóch różnych adresów z podróżami, jaki jest najlepszy sposób odróżnienia adresu początkowego od adresu końcowego?
Dziękujemy za wszelkie sugestie!
Edycja: Zaimplementowałem wszystko poniżej przez hakunin, ale wciąż nie mogę znaleźć sposobu, aby funkcja funkcji. Zdecydowałem się użyćfields_for
zbudowaćTripLocation
obiekty dla każdegoTrip
, ale nie wiem, co umieścić w kontrolerze. Kiedy umieściłem:
def new
@trip = Trip.new
@trip.origin_trip_location.build
@trip.destination_trip_location.build
end
Dostaję błądundefined method build for nil:NilClass
. Myślałem o użyciu tylko@trip.trip_location.build
zamiast tego mam błądundefined method trip_locations for #<Trip:0x007f5a847f94b0>
ponieważ w modelu Trip nie mówihas_many :trip_locations
. Używając zwykłegohas_many :trip_locations
Udało mi się wprowadzić wszystkie niezbędne informacje do tabeli łączenia za pomocą pomocnika formularzafields_for :trip_locations
i powiedzenie, że wycieczkahas_many :trip_locations
, ale potem nie mam metody na zapytanie i ustalenie, który adres ma wartość boolowską w tabeli łączenia ustawioną jako true, a która ma ustawioną wartość false. Gdybym mógł rozwiązać ten problem, myślę, że byłbym cały ustawiony.