Không, chúng không thể hoán đổi cho nhau và có một số khác biệt thực sự.
belongs_to
có nghĩa là khóa ngoại nằm trong bảng cho lớp này. Vì vậy, belongs_to
CHỈ có thể đi trong lớp chứa khóa ngoại.
has_one
có nghĩa là có khóa ngoại trong bảng khác tham chiếu đến lớp này. Vì vậy, has_one
chỉ có thể đi trong một lớp được tham chiếu bởi một cột trong bảng khác.
Vì vậy, đây là sai:
class Person < ActiveRecord::Base
has_one :cell # the cell table has a person_id
end
class Cell < ActiveRecord::Base
has_one :person # the person table has a cell_id
end
Vì vậy, là thế này:
class Person < ActiveRecord::Base
belongs_to :cell # the person table has a cell_id
end
class Cell < ActiveRecord::Base
belongs_to :person # the cell table has a person_id
end
Đối với một hiệp hội hai chiều, bạn cần một trong mỗi, và họ phải đi trong lớp đúng. Ngay cả đối với một hiệp hội một chiều, nó quan trọng mà bạn sử dụng.
Nguồn
2009-05-14 06:51:14
một [blog ở đây] tốt (http://requiremind.com/differences-between-has-one-and-belongs-to-in-ruby-on-rails/) cho cùng một! –
Mã trên không chính xác, phải là 'has_one: cell' và' belong_to: person' ở đó ** không ** là dấu cách giữa dấu hai chấm và từ sau. – Josh