0

Ich habe ein Elternmodell namens Quote. die ein Attribut namens final_quote und hat ein Kind Modell QuoteBoms genannt, die Attribute genannt quote_final_quote und Menge und total_quote (= quote_final_quote * Menge)Polymorphe Assoziationen in Schienen verstehen

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 

Jetzt im verschachtelten Modell hat, bin ich das Zitat mit dem Verein der Auswahl "gehört zu: quote", aber has_many: quotes funktioniert nicht, da ich nur eine quote_id Spalte habe (ich nehme an, das ist das Problem). Ich sehe, dass ich eine dritte Klasse als quotebom_quote_id definieren muss, kann aber nicht herausfinden, wie genau!

Jede Hilfe wird sehr geschätzt!

+0

was versuchst du damit zu tun? Erklären Sie richtig –

+0

versuchen Sie, '' has_and_belongs_to_many: quotes' in 'QuoteBom' Modell anstelle dieser zwei Zeilen. –

+0

Ich erstelle eine App, in der Benutzer Zitate für einen bestimmten Artikel erstellen können. Ein Angebot kann zu einem anderen Angebot gehören, auch wenn es sich um das verschachtelte Modell handelt, und in mehreren Mengen. –

Antwort

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 

Dies ist, wie wir ein einziges Bild Modell gemacht haben und es mit einem oder mehr als einem Modell

Bitte lesen Sie diese Link

+0

Danke für deine Antwort, ich werde das versuchen und updaten! –

+0

Vielen Dank für Ihre Hilfe .. sehr geschätzt, was ich brauchte, war eine andere Foriegn ID Spalte in der Zitat –

0

Von dem, was ich Ihnen sagen kann zugegriffen wird, Ich möchte eine Datenbankstruktur mit den Modellen Quote und QuoteBom erstellen, wo ein Quote viele QuoteBom hat und QuoteBom zu vielen Quotes gehört.

Das ist der Fall, Sie wollen eine has_and_belongs_to_many association verwenden.

Dies erfordert

class Quote < ActiveRecord::Base 
    has_and_belongs_to_many :quote_boms 
end 

class QuoteBom < ActiveRecord::Base 
    has_and_belongs_to_many :quotes 
end 

auf Ihre Modelle Hinzufügen ... und die folgende Migration (vorausgesetzt, Zitat und QuoteBom existieren bereits)

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 

die Verbände oben im Modell Indem und diese Tabelle in Ihrer Datenbank, Rails wird automatisch die Verbindungen zwischen Quote und quote_doms behandeln. Dadurch können Sie auch auf quote_dom.quotes zugreifen, die Sie in Ihrer Frage nicht ausführen konnten.

Dies ist NICHT eine polymorphe Assoziation. Eine polymorphe Assoziation ermöglicht einem Modell, zu mehr als einem Typ eines anderen Modells in einer einzelnen Assoziation zu gehören.

+0

@hypem, danke für Ihre Antwort. Ich werde das so schnell wie möglich versuchen. –

+0

Auswahl Zwischen has_many: through und has_and_belongs_to_many .. Da ich zusätzliche Attribute in der QuoteBom habe, würden Sie vorschlagen, has_many: through statt has_and_belongs_to_many zu verwenden? –

+0

Ja, wenn die Beziehung Attribute, Rückrufe oder Validierungen erfordert, sollten Sie stattdessen eine Beziehung mit vielen Beziehungen verwenden. – hypern