SORU
9 AĞUSTOS 2011, Salı


Nasıl has_many :Mongoid ve mongodb ile ilişkileri sayesinde?

Bu kullanma the Rails guides, örnek modifiye nasıl bir model ilişkisel "has_many:" dernek kullanarak mongoid?

Meydan mongoid has_many :ActiveRecord gibi desteklemiyor.

# doctor checking out patient
class Physician < ActiveRecord::Base
  has_many :appointments
  has_many :patients, :through => :appointments
  has_many :meeting_notes, :through => :appointments
end

# notes taken during the appointment
class MeetingNote < ActiveRecord::Base
  has_many :appointments
  has_many :patients, :through => :appointments
  has_many :physicians, :through => :appointments
end

# the patient
class Patient < ActiveRecord::Base
  has_many :appointments
  has_many :physicians, :through => :appointments
  has_many :meeting_notes, :through => :appointments
end

# the appointment
class Appointment < ActiveRecord::Base
  belongs_to :physician
  belongs_to :patient
  belongs_to :meeting_note
  # has timestamp attribute
end

CEVAP
13 AĞUSTOS 2011, CUMARTESİ


Mongoid has_many :veya eşdeğer bir özelliği yok. Eğer hala birden fazla sorgu gerektirir başka bir ile ilgili bir koleksiyon referans olabilirseniz bile sorgular destek katılmak değil, çünkü MongoDB ile çok yararlı olacaktır.

https://github.com/mongoid/mongoid/issues/544

Normalde eğer bir İLİŞKİSEL bir çok-çok ilişki varsa MongoDB farklı bir alan 'yabancı' iki tarafında. anahtarları içeren bir dizi kullanarak model olur Örneğin:

class Physician
  include Mongoid::Document
  has_and_belongs_to_many :patients
end

class Patient
  include Mongoid::Document
  has_and_belongs_to_many :physicians
end

Ortadan kaldırmak mı istiyorsunuz başka bir deyişle ve benzer bir etki has_many :üzerinden erişim açısından bile "diğer taraf". birleşim tablosu Ama sizin durumunuzda bu sana bir tablo katılmak çünkü muhtemelen uygun olmayan bazı ekstra bilgi değil, sadece bir dernek taşıyan bir Randevu sınıftır.

Nasıl model bu değişir belli ölçüde sorgulamaları gereken çalıştırmak ama olsa gerekir eklemek için Randevu model ve dernekler tanımlamak için Hasta ve Hekim gibi bir şey bu

class Physician
  include Mongoid::Document
  has_many :appointments
end

class Appointment
  include Mongoid::Document
  belongs_to :physician
  belongs_to :patient
end

class Patient
  include Mongoid::Document
  has_many :appointments
end

MongoDB ilişkileri ile her zaman gömülü veya ilişkili belgeler arasında bir seçim yapmak zorunda. Modelinizi MeetingNotes gömülü bir ilişki için iyi bir aday olduğunu tahmin ediyorum.

class Appointment
  include Mongoid::Document
  embeds_many :meeting_notes
end

class MeetingNote
  include Mongoid::Document
  embedded_in :appointment
end

Bu eğer bu bir dernek olsaydı notları birlikte randevu ile birden fazla sorgu gerekir, oysa hep birlikte, almak anlamına gelir. Sadece akılda toplantı notları çok sayıda varsa devreye girer olabilecek tek bir belge için 16 MB boyut sınırı taşımaları gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boogie2988

    boogie2988

    6 NİSAN 2006
  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • TechXCentral

    TechXCentral

    12 Temmuz 2011