2011-10-31 4 views
1

Imaginer 4 modèles Rails 3,1Nested Attributs dans Rails

class Student < ActiveRecord::Base 
    has_many :memberships 
    has_many :courses, :through => :memberships 
    has_many :tests, :through => :courses 
end 

class Membership < ActiveRecord::Base 
    belongs_to :student 
    belongs_to :course 
end 

class Course < ActiveRecod::Base 
    has_many :tests 
    has_many :students, :through => :memberships 
end 

class Test < ActiveRecord::Base 
    belongs_to :course 
end 

Comment puis-je produire une liste triée (par exemple par date) des tests à venir d'un étudiant (je suppose il y a une réponse assez simple, mais je l'ai essayé en vain pendant un certain temps)

Ma meilleure estimation est quelque chose comme:

@upcomingTests = @currstudent.tests.sort_by &:testDateTime 

mais il semble retourner un tableau vide

+0

Veuillez poster votre meilleur essai et le résultat. –

Répondre

0

Tout d'abord, il y a une légère erreur sur votre modèle "Course". Il a besoin de "belongs_to: student".

class Course < ActiveRecod::Base 
    has_many :tests 
    has_many :students, :through => :memberships 
    belongs_to :student 
end 

Une fois que vous avez créé et rempli une clé étrangère, vous pouvez créer un simple named_scope sur votre mode test:

named_scope :ordered, :order => "created_at DESC" 

Ensuite, il est juste la question d'y accéder où que vous voulez:

@ordered_tests = @student.tests.ordered 
Questions connexes