2009-03-05 13 views
0

Je suis en train d'utiliser ma table de jointure « montrant » pour obtenir une liste des filmsRuby on Rails table de jointure relation

Je tentais d'utiliser ce code, mais il ne fonctionne pas.


@showing_list = Showing.find_sorted_showings("time") 

@movie_list = @showing_list.movies <-- NoMethodError 

Voici ma classe Afficher la


class Showing < ActiveRecord::Base 
belongs_to :movie 


def self.find_sorted_showings(order) 
    find(:all, :order => order) 
end 
end 

Comment puis-je changer ma classe montrant pour obtenir le move_list de la showing_list sans le faire manuellement?

Merci

Répondre

3

@showing_list est un tableau.

@showing_list.collect(&:movie).uniq 
1

Essayez:

named_scope :find_sorted_showings, lambda { |order| 
    { :order => order } 
} 
2

Utilisez la capacité de chargement impatient:

def self.find_sorted_showings(order) 
    find(:all, :order => order, :include => :movie) 
    end 

L'ensemble de données résultant inclura maintenant le film en même temps que le spectacle fois accessible via:

@showing.each do |show_time| 
    show_time.movie.title 
end 

Bien sûr e, cela pose des problèmes de regroupement si vous cherchez à créer une liste plus lisible. mais vous pouvez faire des choses assez fantaisistes avec la méthode group_by, comme:

find(:all, :order => order, :include => :movie).group_by {|s| s.show_time} 

Hope that helps.

-Chris