rails中的t.belongs_to和t.references有什么区别?

时间:2011-10-16 23:56:24

标签: ruby-on-rails-3 ruby-on-rails-3.1 rails-migrations

t.referencest.belongs_to之间有什么区别? 为什么我们有这两个不同的词?在我看来他们做同样的事情? 试过一些谷歌搜索,但没有找到解释。

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 个答案:

答案 0 :(得分:139)

查看the source code,他们会做同样的事情 - belongs_toreference的别名:

  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用于其他类型的关联。