What is the difference between t.belongs_to and t.references in rails?

Looking at the source code, they do the same exact thing — belongs_to is an alias of 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

This is just a way of making your code more readable — it’s nice to be able to put belongs_to in your migrations when appropriate, and stick to references for other sorts of associations.

Leave a Comment