0

J'ai un modèle parent appelé Quote. qui a un attribut appelé final_quote et a un modèle enfant appelé QuoteBoms, qui a des attributs appelés quote_final_quote et de la quantité et total_quote (= quote_final_quote * quantité)Comprendre les associations polymorphes dans les rails

class Quote < ActiveRecord::Base 
    has_many :quote_boms, dependent: :destroy 
    accepts_nested_attributes_for :quote_boms, :reject_if => :all_blank, :allow_destroy => true 

class QuoteBom < ActiveRecord::Base 
    belongs_to :quote 
    has_many :quotes 
end 

maintenant dans le modèle imbriqué, je suis la sélection de la citation avec l'association "belongs_to: quote" mais has_many: les guillemets ne fonctionnent pas car je n'ai qu'une seule colonne quote_id (je suppose que c'est le problème). Je vois que j'ai besoin de définir une troisième classe comme quotebom_quote_id mais je n'arrive pas à comprendre comment exactement!

Toute aide sera grandement appréciée!

+0

qu'est-ce que vous essayez de faire avec? expliquer correctement –

+0

essayez d'utiliser 'has_and_belongs_to_many: quotes' dans le modèle' QuoteBom' au lieu de deux lignes. –

+0

Je suis bulding une application où l'utilisateur peut faire des citations pour un élément donné. Une citation peut appartenir à une autre citation à travers le modèle imbriqué, et en plusieurs quantités. –

Répondre

0
class Image < ActiveRecord::Base 
    belongs_to :imageable, :polymorphic => true 
end 
class Profile < ActiveRecord::Base 
    has_many :images, :as => :imageable 
end 
class Article < ActiveRecord::Base 
    has_many :images, :as => :imageable 
end 

Voici comment nous avons fait un seul image modèle et il est accessible à partir de ce que je peux par un ou plusieurs modèles

S'il vous plaît se référer ce Link

+0

Merci pour votre réponse, je vais essayer et mettre à jour! –

+0

Merci pour votre aide .. aprécié beaucoup, ce dont j'avais besoin était une autre colonne d'identification foriegn dans le devisbom –

0

dire, vous souhaite créer une structure de base de données contenant les modèles Quote et QuoteBom où un devis a beaucoup de QuoteBom et QuoteBom appartient à de nombreuses citations. Dans ce cas, vous devrez utiliser un has_and_belongs_to_many association.

Cela exigera d'ajouter à vos modèles

class Quote < ActiveRecord::Base 
    has_and_belongs_to_many :quote_boms 
end 

class QuoteBom < ActiveRecord::Base 
    has_and_belongs_to_many :quotes 
end 

... et la migration suivante (en supposant citation et QuoteBom existent déjà)

class CreateQuotesAndQuoteBoms < ActiveRecord::Migration 
    def change 
    create_table :quote_quote_boms, id: false do |t| 
     t.belongs_to :quote, index: true 
     t.belongs_to :quote_bom, index: true 
    end 
    end 
end 

En ayant les associations ci-dessus dans le modèle et ce Dans votre base de données, les rails géreront automagiquement les associations entre quote et quote_doms. Par conséquent, vous pourrez également accéder à devis_dom.quotes que vous avez déclaré ne pas pouvoir faire dans votre question.

Ceci est PAS une association polymorphe. Une association polymorphique permet à un modèle d'appartenir à plusieurs types d'autres modèles dans une même association.

+0

@hypem, merci pour votre réponse. Je vais essayer cela dès que possible. –

+0

Choisir entre has_many: through et has_and_belongs_to_many .. étant donné que j'ai des attributs supplémentaires dans le QuoteBom suggérez-vous d'utiliser has_many: through au lieu de has_and_belongs_to_many? –

+0

Oui, si la relation requiert des attributs, des rappels ou des validations, vous devez utiliser une relation de type "through through" à la place. – hypern