137 votes

Quelle est la différence entre t.belongs_to et t.references in rails?

Quelle est la difference entre t.references et t.belongs_to
Pourquoi avons-nous ces deux mots différents? Il me semble qu'ils font la même chose! J'ai essayé som de recherche sur Google, mais je n'ai trouvé aucune explication.

 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
 

184voto

muffinista Points 3645

En regardant le code source, ils font exactement la même chose -- belongs_to est un alias de 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

C'est juste une façon de rendre votre code plus lisible -- c'est agréable d'être en mesure de mettre belongs_to dans votre migrations lorsque cela est approprié, et s'en tenir à l' references pour les autres sortes d'associations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X