레일에서 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
그들은 똑같이 작동합니다-그게 그렇게 나쁜가요? 참조는 외래 키 열을 삽입합니다. 대신 belongs_to를 사용하여 마이그레이션을 더 읽기 쉽게 만들 수 있습니다. 자세한 내용은 guides.rubyonrails.org/migrations.html 을 참조 하세요.
muffinista 2011 년

1
나쁜 일이라고 말하지 않습니다. 그들이 동일하게 작동하는지 또는 다른 방식으로 작동하는지에 대해 혼란스러워했습니다. 동일하게 작동한다는 특정 문서를 찾을 수 없기 때문입니다. http://guides.rubyonrails.org/migrations.html 도 그 문제에 대해 명확하지 않습니다.
Tornskaden

3
이는 이전 버전과의 호환성을위한 것일 references수 있으며 향후 레일 릴리스에서 더 이상 사용되지 않으며 제거 될 것입니다. 이것에 대해 내 말을 받아들이지 마십시오. 그것은 단지 교육받은 추측입니다.
bricker

"다른 도우미는 참조 (
소속 _

5
또한 여기에 소스 코드는 - belongs_to가 참조 직선 별칭입니다 github.com/rails/rails/blob/...
muffinista

답변:


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하고 다른 종류의 연결을 고수 할 수 있다는 것이 좋습니다 .


앞으로 이렇게 보관할 건지 아니면 하나를 없앨 건지 궁금 해요!? 나는 내 코드가 진짜 영어처럼 보이게 만드는 것을 선택할 수 있다는 것을 좋아합니다.
Tornskaden

둘 다 여기에 머물러 있다고 생각합니다. 커밋 로그를 살펴보면 2007 년부터
이랬습니다

4
IMO references는 용어에 대한 모호한 선택입니다. 그들은 이름 before_filterbefore_action이 모호성을 감소하기 때문에 좋은 움직임이었다. 의 한 가지 장점은 references모델에서 사용하는 것과 단순히 다르기 때문에 모델 또는 마이그레이션에있는 경우 혼동이 적다는 것입니다. 그러나 다른 용어는이 기준을 충족합니다.
ahnbizcad 2014 년

2
IMO references는 db 수준에서 더 나은 용어입니다.
vasilakisfil

1
실제로 영어에서 같은 의미라고 생각하지 않습니다 ... 그래서 조금 이상합니다.
xji
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.