2010-08-06 3 views
1

Ceci est la structure de ma base de données en Ruby on Rails:Comment rechercher dans un tableau d'objets dans Ruby on Rails?

utilisateur

ont de nombreuses notes
notes ont de nombreuses catégories
catégories ont beaucoup de notes

J'ai installé cette relation avec has_many: par. J'utilise

current_user.notes 

pour obtenir les notes appartenant à l'utilisateur. Mais quel est le meilleur moyen d'obtenir les notes appartenant à l'utilisateur actuel qui ont une certaine catégorie? Suis-je censé utiliser des méthodes de recherche comme je le ferais sur un modèle? Merci d'avoir lu.

+0

quelle table utilisez-vous pour rejoindre la note et la catégorie? Ceci est utilisé dans la requête. – tadman

+0

@tadman: J'utilise une table appelée catégorisation – ben

Répondre

0

je crois qu'il devrait être:

current_user.notes.all(:joins => :categories, :conditions => ["categories.name = ?", search_parameter]) 

Juste une note que cela effectuer une requête avec un INNER JOIN d'utiliser un LEFT JOIN, vous devez utiliser :include:

current_user.notes.all(:include => :categories, :conditions => ["categories.name = ?", search_parameter]) 
0
class User < ActiveRecord::Base 
    has_many :notes 
    has_many :categories, :through => :notes 
end 

class Note < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :category 
end 

class Category < ActiveRecord::Base 
    has_many :notes 
end 

@ current_user.notes.all

Je pense, Vous devriez briser votre plusieurs à plusieurs relation entre les notes et les catégories.

0

vous pouvez ajouter un named_scope aux notes

named_scope :with_categories, 
       lambda{|cat| 
       { 
        :joins => [:categories], 
        :conditions => ["categories.id IN (?)", cat] 
       } 
       } 

et vous pouvez simplement utiliser

current_user.notes.with_categories(1, 2) 
Questions connexes