2010-08-09 2 views
0

C'est la structure de ma base de données en Ruby on Rails:Comment effectuer cette recherche dans RoR?

    utilisateur
  • ont de nombreuses notes
  • notes ont de nombreuses catégories
  • catégories ont de nombreuses notes

La relation entre les notes et les catégories est has_many :through, j'ai un modèle nommé NoteCategory et une table note_categories.

Le modèle de note possède un champ de date, qui représente la date à laquelle la note a été créée.

je reçois les notes pour l'utilisateur avec cette ligne:

current_user.notes 

Comment puis-je fournir une date et retourner les catégories pour toutes les notes de l'utilisateur qui ont été créés à cette date? Merci d'avoir lu.

edit: J'ai oublié de préciser que j'ai également besoin des catégories à classer par le champ created_at de la note à laquelle elles sont attachées.

modifier 2: voici les associations réelles

user.rb

has_many :notes 

note.rb

belongs_to :user 
has_many :note_categories 
has_many :categories, :through => :note_categories 

category.rb

has_many :note_categories 
has_many :notes, :through => :note_categories 

Répondre

2

Étant donné que vous avez

class User 
    has_many :notes 
    has_many :categories, :through => :notes 
end 

class Note 
    has_many :categories # <-- source reflection 
end 

utiliser alors ce viseur:

user.categories.all(:order => 'notes.created_at') 

ou

user.categories.find :all, :order => 'notes.created_at' 
+0

Merci pour votre réponse, je vais essayer. Une question rapide, le champ que je veux trier est en fait notes.created_at, c'est-à-dire que les catégories sont triées en fonction de la date de création de la note à laquelle elles sont attachées. Est-ce que c'est ce que fait votre code? – ben

+1

Révisé, je vous ai mal compris ... – hurikhan77

+0

J'ai l'erreur suivante: Macro de réflexion de source invalide: has_many: through pour has_many: catégories,: through =>: notes. Utilisez: source pour spécifier la réflexion de la source. – ben

Questions connexes