Ruby on Rails Partecipa alla relazione della tabella
-
03-07-2019 - |
Domanda
Sto provando a utilizzare la mia tabella di join " mostrando " per ottenere un elenco di film
Stavo cercando di usare questo codice ma non funziona.
@showing_list = Showing.find_sorted_showings("time")
@movie_list = @showing_list.movies <-- NoMethodError
Ecco la mia classe di dimostrazione
class Showing < ActiveRecord::Base
belongs_to :movie
def self.find_sorted_showings(order)
find(:all, :order => order)
end
end
Come posso cambiare la mia classe di proiezione per ottenere la move_list dalla mostra_list senza farlo manualmente?
Grazie
Soluzione
@showing_list è un array.
@showing_list.collect(&:movie).uniq
Altri suggerimenti
Usa la capacità di caricamento desideroso:
def self.find_sorted_showings(order)
find(:all, :order => order, :include => :movie)
end
Il set di dati risultante includerà ora il filmato insieme agli orari degli spettacoli accessibili tramite:
@showing.each do |show_time|
show_time.movie.title
end
Naturalmente, ciò pone problemi di raggruppamento se stai cercando di creare un elenco più leggibile. ma puoi fare cose piuttosto fantasiose con il metodo group_by, come:
find(:all, :order => order, :include => :movie).group_by {|s| s.show_time}
Spero che sia d'aiuto.
-Chris
Prova:
named_scope :find_sorted_showings, lambda { |order|
{ :order => order }
}