J'essaie de faire un modèle de rails contenant deux attributs différents "has_one" de la même classe. Je me sens comme un moyen plus facile de le faire, mais je ne peux pas y penser maintenant.
Donc, disons que je voudrais créer un modèle de mariage dans les rails p> Mon objectif est d'avoir accès à l'objet Groom de l'objet de mariage. (Être capable d'appeler Y a-t-il un meilleur moyen de penser à tout le problème? P> p> @ wedding.groom.name code> ou autre) Il n'y a aucun moyen pour le modèle de mariage de savoir quelle "personne" est la mariée et qui est le marié. P> < p> Dois-je utiliser une table unique de table? Ou devrais-je utiliser des clés étrangères? P>
3 Réponses :
Changer personne code> à
participant code> et donnez-le un rôle
code> attribut. Ensuite, vous pouvez faire
class Wedding < ActiveRecord::Base
has_one :groom, :class_name => 'Participant', :condition => "role = 'groom'"
has_one :bride, :class_name => 'Participant', :condition => "role = 'bride'"
end
Hmm .. : condition code> est un bon appel. C'est peut-être ce que je cherche. Disons que j'ai un
marié code> qui est un "participant". J'ai ensuite défini
@ wedding.groom = groom code> et sauvegardez le mariage. Quand je charge ensuite le mariage et appelez
@ wedding.groom.name code>, va-t-il / savoir / quel objet participant je veux?
Oui. Le contenu de la condition: la condition devient la clause SQL lorsque cela va charger le marié.
Selon la différence qu'ils seront traités dans le domaine, il peut y avoir rien de mal à l'approche que vous avez prise.
Dans l'éventualité que le "marié" et "mariée" ne nomme principalement des conventions qui sont généralement traitées de manière égale, il peut être plus sage de simplement faire un has_many: parties code> relation et laissez la personne
code> Modèle Déterminez lequel est la mariée / le marié. Peut-être quelque chose comme ceci: p>
Wow, toutes ces réponses ressemblent à ce qu'ils travailleraient. Je suppose que j'ai la décision de faire.
Vos associations sont à l'envers pour la fonctionnalité que vous souhaitez ..
class Wedding < ActiveRecord::Base belongs_to :groom, :class_name => 'Person' belongs_to :bride, :class_name => 'Person' end class Person < ActiveRecord::Base has_many :weddings # who has just one wedding now days??? end Wedding.find(params[:id]).groom.name Person.find(params[:id]).weddings.last # hopefully first also :)
"Qui a juste un mariage maintenant jours ???" - MDR. Je pense que l'intention est d'aider le planificateur de mariage, pas que les personnes individuelles gèrent leur vie ...
Je sais .. :) Je ne pouvais pas résister .. changer ce qui précède vers un has_one et nous pouvons tous croire que l'amour durera éternellement! :)
Je suppose que j'essayais d'éviter de mettre toutes les clés étrangères sur le modèle de mariage, mais vous avez raison, cela fonctionnerait.
Quelle était la raison de l'évitement? Mettez les clés étrangères où elles sont censées être! (Je n'ai été marié qu'une seule fois)
C'est le phrasé de ces choses qui me jette. Un mariage n'appartient pas à une personne, conceptuellement un mariage "has_one" mariée et le marié. Mais oui, la plupart de la solution la plus redresseur est de les renvoyer. Bonne réponse.