Rails: Non id de clé étrangère de recherche ActiveRecord
Je veux ActiveRecord
à la recherche par un non-colonne d'id d'une table.
J'espère que cela est clair quand je vous donne mon exemple de code.
class CoachClass < ActiveRecord::Base
belongs_to :coach
end
class Coach < ActiveRecord::Base
has_many :coach_classes, :foreign_key => 'user_name'
end
Quand je fais un
coach_obj.coach_classes
, ce, à juste titre, déclenche
SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 2)
(2 étant le coach du id
ici qui est mon problème.)
Je veux qu'il déclenche
SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 'David')
("David" être le coach de l' user_name
)
user_name
est unique et présente dans les deux tables.
Je ne veux pas avoir un coach_id
dans mon coach_classes
table pour une raison quelconque.
- conseils non sollicités: vous pouvez envisager d'ajouter un coach_id à la table, il sera plus facile si cette relation est imbriquée et plus conventionnel.
- Merci Jed. Mais je ne veux pas coach_id là pour une raison.
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez besoin de spécifier la clé primaire d'options sur les associations ainsi:
Spécifie la méthode qui retourne la clé primaire de l'objet associé (par défaut
id
).has_many
, sansbelongs_to
sur l'autre côté.Il y a une option appelée
primary_key
qui est par défaut à:id
. Vous souhaitez utiliser:Également utiliser ces options sur la
belongs_to
association.Lire la suite dans le la documentation.
Vous devez utiliser
finder_sql
: