Raylarda t.belongs_to ve t.references arasındaki fark nedir?


123

Arasındaki fark nedir t.referencesve t.belongs_to? Neden bu iki farklı kelimeye sahibiz? Bana öyle geliyor ki aynı şeyi yapıyorlar? Biraz Google araması denedim, ancak bir açıklama bulamadım.

class CreateFoos < ActiveRecord::Migration
  def change
    create_table :foos do |t|
      t.references :bar
      t.belongs_to :baz
      # The two above seems to give similar results
      t.belongs_to :fooable, :polymorphic => true
      # I have not tried polymorphic with t.references
      t.timestamps
    end
  end
end

1
Aynı şekilde çalışıyorlar - bu çok kötü bir şey mi? referanslar sizin için bir yabancı anahtar sütunu ekler. Bunun yerine, geçişinizi daha okunaklı hale getirmek için, bunun yerine kendi_to'yu kullanabilirsiniz. Bkz guides.rubyonrails.org/migrations.html bazı detaylar için.
muffinista

1
Kötü bir şey olduğunu söylememek. Aynı şekilde mi yoksa farklı şekillerde mi çalıştıkları konusunda kafam karıştı, çünkü aynı şekilde çalıştıklarını belirten özel bir belge bulamıyorum. http://guides.rubyonrails.org/migrations.html de bu konuda net değil.
Tornskaden

3
Bu muhtemelen sadece geriye dönük uyumluluk içindir ve referenceskullanımdan kaldırılacak ve gelecekteki bir ray sürümünde kaldırılacaktır. Bu konuda sözüme güvenmeyin, bu sadece akıllıca bir tahmin
bricker

"Diğer yardımcıya referanslar denir (aittir_tolarak da mevcuttur). En basit haliyle, sadece biraz okunabilirlik katar" - kılavuzdan
muffinista

5
Ayrıca kaynak kodu da burada - aittir_to, referansların düz bir takma adıdır github.com/rails/rails/blob/…
muffinista

Yanıtlar:


162

Kaynak koda bakıldığında , aynı şeyi yapıyorlar - belongs_toşunun bir takma adıdır reference:

  def references(*args)
    options = args.extract_options!
    polymorphic = options.delete(:polymorphic)
    args.each do |col|
      column("#{col}_id", :integer, options)
      column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) unless polymorphic.nil?
    end
  end
  alias :belongs_to :references

Bu, kodunuzu daha okunaklı hale getirmenin bir yoludur - belongs_touygun olduğunda geçişlerinizi yerleştirmek ve referencesdiğer türden ilişkilendirmeler için bağlı kalmak güzeldir .


Acaba gelecekte de böyle mi tutacaklar yoksa birini kaldıracaklar mı? Kodumu daha çok gerçek ingilizceye benzeyen hangisi olursa olsun seçebilmeyi bu şekilde seviyorum.
Tornskaden

Her ikisinin de burada kalacağını tahmin ediyorum. Kayıt günlüklerine baktığımızda, 2007'den beri bu şekilde.
muffinista

4
IMO, referencesbir terim için belirsiz bir seçimdir. Onlar değiştirildi before_filteretmek before_actionBelirsizliğe azaltılmış çünkü iyi bir hamle oldu. Bunun bir avantajı references, modelde kullandığınızdan basitçe farklı olmasıdır, bu nedenle model veya geçişte iseniz kafanız daha az karışır. Ancak farklı olan herhangi bir terim bu kriteri karşılayacaktır.
ahnbizcad

2
IMO references, db düzeyinde daha iyi bir terimdir.
vasilakisfil

1
Aslında İngilizcede aynı anlama geldiklerini sanmıyorum ... Bu yüzden biraz tuhaf.
xji
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.