J'ai un objet parent, post, qui a les enfants suivants.
has_one :link has_one :picture has_one :code
3 Réponses :
Je pense que vous recherchez l'option Lorsque tout le reste échoue, lisez les docs: http://apidock.com/ Rails / Activerecord / Associations / ClassMethods / HAS_ONE P> : comme code> pour
has_one code>. Il vous permet de spécifier le nom du
appartiens_to code> Association Fin. P>
Peut-être que je manque quelque chose, mais comment créerais-je une association dynamique avec un enfant en utilisant: comme? Je comprends le polymorphisme en ce qui concerne la manière dont un objet enfant pourrait avoir n'importe quel type d'objet parent. Mais ce que je demande, c'est comment un objet parent peut avoir n'importe quel type d'objet enfant. Je veux faire quelque chose comme @ Post.Postable et obtenir l'objet enfant, qui serait l'un des liens, des images ou du code.
Y a-t-il un moyen d'utiliser polymorphe associations à l'inverse afin que je ne pas avoir à avoir link_id, picture_id et code_id champs dans mon Table de poste? P>
has_one code> implique que la clé étrangère est dans la table autre em>. Si vous avez vraiment défini votre modèle de cette façon, vous n'aurez pas
link_id code>,
image_id code> et
code_id code> dans votre table de poste. Je pense que vous vouliez dire
appartient à l'adresse_to code>. P>
Je veux faire quelque chose comme @ post.postable et obtenez l'enfant objet, qui serait l'un des liens, image ou code. p> blockquote>
Je pense que vous pouvez le faire en utilisant STI et en combinant les liens
liens code>,
images images code> et
codes code> Tables, puis test le type du modèle lors de la récupération. Cela semble karserie cependant, et pourrait se retrouver avec beaucoup de colonnes inutilisées. P>
est une raison de ne pas stocker les colonnes d'identité inutilisées, autres que d'économiser de l'espace? Si vous êtes prêt à les conserver, vous pouvez définir un attribut virtuel et une colonne
postabling_type code>: (code non testé, peut échouer de manière spectaculaire) em> p>
def postable self.send(self.postable_type) end def postable=(p) self.send(postable_type.to_s+"=",p) end
Je cherche juste une façon plus élégante de faire des choses que d'avoir plusieurs * _idonnes. Bien que ce fil se révèle, l'approche multiple * _id est probablement la plus simple et la meilleure.
J'ai écrit un petit gist montrant comment faire cela: https://gist.github.com/1242485 P>
Serait-il logique d'avoir la photo avoir une relation: has_many? Ensuite, vous pourriez faire ce que vous cherchez ..