What is the difference between t.belongs_to and t.references in rails?
rails-migrations, ruby-on-rails
Solution
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.
Problem
What is the difference between `t.references` and `t.belongs_to`? Why are we having those two different words? It seems to me they do the same thing? Tried some Google search, but find no explanation. ``` 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 ```