Domanda

OK, quindi ho tre oggetti diversi: una persona, un posto e un'attrezzatura.Ogni può avere un indirizzo, nella maggior parte dei casi di indirizzo multiplo e più numeri di telefono.Quindi il mio pensiero è creare tabelle specifiche dell'oggetto, l'indirizzo ha un indirizzo e una tabella del telefono.Qui la mia domanda:

In questo modo, in genere, nel mio mondo SQL, avrei solo una colonna Object_ID nell'indirizzo e nella tabella del telefono e inserire un ID dell'oggetto nella colonna ID oggetto, quindi seleziona tutti gli indirizzi o i record del telefono che corrispondono.

Potrei farlo, find_by_sql e ottenere i record ma preferirei rimanere all'interno del paradigma di Activecord.Quindi significa che dovrei avere una colonna ID nella tabella per ogni oggetto, quindi una persona_id, place_id, ecc.

Qual è il modo "giusto" per modellarlo?

È stato utile?

Soluzione

È possibile creare associazioni polimorfiche con ActiveCord, in modo da poter aggiungere object_id e object_type agli indirizzi e alle tabelle telefoniche e per specificare le associazioni come questa:

class Address
  belongs_to :object, :polymorphic => true
end

class PhoneNumber
  belongs_to :object, :polymorphic => true
end

class Person
  has_many :addresses, :as => :object
  has_many :phone_numbers, :as => :object
end

class Place
  has_many :addresses, :as => :object
  has_many :phone_numbers, :as => :object
end

class Equipment
  has_many :addresses, :as => :object
  has_many :phone_numbers, :as => :object
end
.

In questo modo, Person.first.addresses dovrebbe eseguire una query come Addresses.where(:object_type => "Person", :object_id => Person.first.id) e viceversa per il resto dei modelli e delle associazioni.

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