T.belongs_to और t.references के बीच अंतर क्या है?


123

बीच क्या अंतर है t.referencesऔर t.belongs_to? हम उन दो अलग-अलग शब्दों को क्यों कह रहे हैं? मुझे लगता है कि वे भी यही काम करते हैं? कुछ Google खोज की कोशिश की, लेकिन कोई स्पष्टीकरण नहीं मिला।

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
वे वही काम करते हैं - जो इतनी बुरी बात है? संदर्भ आपके लिए एक विदेशी कुंजी कॉलम सम्मिलित करता है। आप अपने माइग्रेशन को अधिक पठनीय बनाने के बजाय उसका उपयोग कर सकते हैं। कुछ विवरणों के लिए guide.rubyonrails.org/migrations.html देखें ।
मफिनिस्ता

1
यह नहीं कहना बुरी बात है। बस इस बारे में भ्रमित हो गए कि क्या वे एक ही या अलग-अलग तरीकों से काम करते हैं, क्योंकि मुझे कोई दस्तावेजीकरण यह कहते हुए नहीं मिल सकता है कि वे एक ही काम करते हैं। http://guides.rubyonrails.org/migrations.html भी उस मामले पर स्पष्ट नहीं है।
टॉर्न्सडेन

3
यह केवल पिछड़ी अनुकूलता के लिए संभव है referencesऔर रेल के भविष्य के रिलीज में पदावनत और हटा दिया जाएगा। इस पर मेरा शब्द मत लो, यह केवल एक शिक्षित अनुमान है।
ईंट

"दूसरे सहायक को संदर्भ कहा जाता है (यह भी rel_to के रूप में उपलब्ध है)। अपने सरलतम रूप में यह सिर्फ कुछ पठनीयता जोड़ता है" - गाइड से
मफिनिस्ता

5
यहाँ भी स्रोत कोड है
अंतर्गत_तक

जवाबों:


161

स्रोत कोड को देखते हुए , वे एक ही सटीक कार्य करते हैं - belongs_toएक उपनाम है 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

यह आपके कोड को अधिक पठनीय बनाने का एक तरीका है - belongs_toउपयुक्त होने पर अपने माइग्रेशन में सक्षम होना अच्छा है , और referencesअन्य प्रकार के संघों के लिए छड़ी ।


मुझे आश्चर्य है कि अगर वे इसे भविष्य में इस तरह रखने जा रहे हैं या वे उनमें से एक को दूर करने जा रहे हैं !? मुझे यह इस तरह से पसंद है, जो भी चुनने में सक्षम है वह मेरे कोड को वास्तविक अंग्रेजी की तरह दिखता है।
टॉर्न्सैडेन

मुझे लगता है कि दोनों यहाँ रहने के लिए हैं। कमिट लॉग को देखते हुए, यह 2007 से इस तरह से है।
मफिनिस्ता

4
IMO, referencesएक शब्द के लिए एक अस्पष्ट विकल्प है। उन्होंने नाम बदल before_filterदिया before_action, जो एक अच्छी चाल थी क्योंकि इससे अस्पष्टता कम हो गई। इसका एक फायदा referencesयह है कि यह आपके द्वारा मॉडल में उपयोग किए जाने से अलग है, इसलिए यदि आप मॉडल या माइग्रेशन में हैं तो आप कम भ्रमित होते हैं। लेकिन कोई भी शब्द जो इस मापदंड को पूरा करेगा।
अहानिबेकद

2
IMO referencesdb-level में बेहतर टर्म है।
vasilakisfil

1
मुझे नहीं लगता कि वे वास्तव में अंग्रेजी में एक ही बात का मतलब है ... तो यह थोड़ा अजीब है।
xji
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.