Aktywne Wpisy
N-Avoie +943
Ignacy_Patzer +11
Aktywne Znaleziska
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Hej mirki, mam problem.
Mam trzy modele - Film, Użytkownika oraz Zamówienie.
Model Zamówienie to tabela łączona (has_many :through) pomiędzy filmami i użytkownikami (relacja wielu-do-wielu). Ta tablica łączona ma jednak dodatkowe pola (np. status - zrealizowane bądź nie). Powiedzmy, że mam użytkownika oraz film - jak teraz napisać w kontrolerze instrukcje, które pozwolą mi na stworzenie tej tabeli Zamówienie z dodatkowym parametrem? samo
user.movies << movies (tak, ogólnie to po angielsku piszę :P )
Mnie nie urządza. Wiem, że mogę zrobić user.orders, ale jak wtedy wyciągnąć odpowiedni order?
Order.create!(:user => user, :movie => movie, :status => 'new')
Komentarz usunięty przez autora
Serio? Wiadomo, nowe ładniejsze i szybsze w pisaniu, ale o taką syntaktyczną pierdołę zwracać uwagę? :)
Jedynie chyba jako symbol tego, że człowiek nie jest na bieżąco z rozwojem technologii.
@Daronk:
Co do wymienionej własnie wyżej nowej składni - Order.create!(user: user, movie: movie, status: 'new')
Komentarz usunięty przez autora
def usermovies
user = User.find(currentuser.id)
orders = user.orders.where("status = true")
moviesids = []
orders.each do |order|
moviesids << order.movieid
end
@movies = Movie.where(id: moviesids)
end
W skrócie wyciągam z orderów, w których status jest true (jak mi wróci callback z
user = User.find(currentuser.id) - zbędne, do wywalenia. Używasz
current_user
:)Można to na pewno skrócić wybieranie moviesids mapem:
movies_ids = user.orders.where("status = true").map(&:movie_id)
Dodatkowo takie coś "orders.where("status = true")" najlepiej przerzucić do modelu jako scope. Daje to kod bardziej DRY
No i zapytania do bazy masz tutaj dwa - przy pobieraniu
movie_id
z orderu już nie sięga do bazy danychNie wiem, czy dobrze zrozumiałem, ale reasumując, ja bym