2014-05-14 4 views
0

J'ai un modèle d'article qui peut avoir exactement un modèle d'image qui lui est associé. Cependant, mon modèle Image peut être associé à de nombreux articles. Mon premier coup de couteau à cela était de définir la relation via:Rails Association Design

class Article < ActiveRecord::Base 
    belongs_to :image 
end 

class Image < ActiveRecord::Base 
    has_many :articles :dependent => :nullify 
end 

Cela fonctionne sur le plan technique et il ne nécessite que la clé étrangère image_id être sur la table des articles. Cela est parfaitement logique du point de vue de la base de données, mais cela ne va pas. Cela n'a pas de sens de dire qu'un article appartient à une image. En réalité, une image appartient à un article. Il serait plus logique de dire qu'un article a une seule image, mais si j'utilise has_one, cela place la clé étrangère article_id dans la table Images. Puisqu'une image peut avoir plus d'un article, cela n'a vraiment aucun sens d'avoir une seule colonne article_id définie dans la table Images.

Il doit y avoir un moyen plus simple de modéliser cela.

+2

Eh bien, cela a du sens du point de vue de la base de données, donc j'y réfléchirais. Du point de vue de Rails, cela pourrait ne pas être parfaitement logique, mais la relation est schématiquement appropriée. –

Répondre

0

Cela fonctionnerait-il pour vous?

class Article < ActiveRecord::Base 
    has_one :image 
end 

class Image < ActiveRecord::Base 
    has_and_belongs_to_many :articles, :dependent => :nullify 
end