Domanda

Ho le seguenti due modelli

class ContactField < ActiveRecord::Base
end

class Address < ContactField
end

class Phone < ContactField
end

e

class Contact < ActiveRecord::Base
end

class Company < Contact
end

class Person < Contact
end

Voglio un contatto, non importa è che società o persona, di avere molti ContactFields (indirizzi e telefoni) ... Allora, dove devo mettere quelli ha molti e appartiene a ? Grazie

È stato utile?

Soluzione

È già detto in parole povere :-)

  

Voglio un contatto, non importa è che società o persona, di avere molti ContactFields (indirizzi e telefoni) ... Allora, dove dovrei mettere quelle ha molti e appartiene a? Grazie

class Contact < ActiveRecord::Base
 has_many :contact_fields
end

class ContactField < ActiveRecord::Base
 belongs_to :contact
end

Questo rapporto sarà ereditato da entrambi l'indirizzo e il telefono

Altri suggerimenti

Sembra che si sta descrivendo una appartiene alla relazione. Le associazioni dovrebbero essere definiti nella classe padre, in modo che possano essere ereditate dalle sottoclassi.

class ContactField < ActiveRecord::Base
  belongs_to :contact
  belongs_to :company, :foreign_key => :contact_id
  belongs_to :person, :foreign_key => :contact_id
end

class Contact < ActiveRecord::Base
  has_many :contact_fields
  has_many :addresses
  has_many :phones
end

Tuttavia @ contact.contact_fields sarà solo restituire i record ContactField. Se avete bisogno i metodi definiti in una qualsiasi delle classi secondarie si può sempre utilizzare il metodo diventa. Ci sono alcuni modi per aggirare questo. Tale aggiungendo le associazioni in più, come ho fatto io. O utilizzando ActiveRecord :: Base # diventa

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top