2010-07-16 4 views
0

J'ai des problèmes avec les moteurs de recherche dynamiques basés sur les attributs. Ils ne semblent pas sortir pour mon modèle.Rails find_by macros avec une relation has_many

class Person < ActiveRecord::Base 
    belongs_to :team 
end 

class Team < ActiveRecord::Base 
    has_many :people 
end 

donc dans le script/console, pour trouver les équipes ayant personne avec ID 1, je devrais être en mesure de le faire:

>> Team.find_by_person_id(1) 

Je reçois l'erreur:

NoMethodError: undefined method `find_by_person_id' 

Cette est vraiment étrange parce que chercher dans la direction opposée, à savoir:

>>Person.find_all_by_team_id(1) 

Trouvera avec succès toutes les personnes sur l'équipe 1.

Que doit-on faire, pour trouver l'équipe par person_id?

Répondre

0

Ce que vous essayez de faire est d'obtenir une équipe lorsque vous connaissez la personne.

person = Person.find(1) 
team = person.team 

# or in one line 
team = Person.find(1).team 
1

Si vous voulez trouver une personne en particulier parmi les personnes qui appartiennent à certaines équipes, vous donner:

@some_team.people.find_by_id(1) 

Person.find_all_by_team_id fonctionne parce que team_id est une colonne dans la table People.

Team.find_by_person_id (1) ne fonctionne pas parce que:

1) L'équipe est la classe et non une instance de cette classe, ce qui signifie qu'il n'a pas la méthode personnes et qui est la raison pour laquelle vous get the no_method_error, et

2) Même si la partie d'instance est correctement créée (ie @ un_team.people.find_by_person_id), une personne n'a pas de colonne person_id, mais elle a une colonne id à la place. C'est pourquoi j'ai mentionné @ some_team.people.find_by_id ci-dessus.

+0

Cela a également retourné: NoMethodError: méthode 'personnes » – SooDesuNe

+0

non défini Eh bien, je viens d'essayer que sur un nouveau projet de rails et il fonctionne. Il doit y avoir un autre problème que vous avez qui provoque l'erreur. Pourriez-vous décrire exactement ce que vous tapez à partir du terminal jusqu'à ce que vous obteniez l'erreur? – Petros

+0

RAILS_ROOT/script/console Ensuite, copiez et collez votre solution. rails v2.3.8 ">> Personne #" montre "team_id" Si je supprime le has_many: les gens, je reçois l'erreur: ArgumentError: Aucune association trouvée pour nom 'personnes. A-t-il déjà été défini? Je suis complètement désemparé. – SooDesuNe

Questions connexes