回答
他们在本质上是做同样的事情,唯一的区别是你所在的关系的哪一方。如果User
具有Profile
,那么在User
类中,您将有has_one :profile
和Profile
类中,您将拥有belongs_to :user
。要确定谁拥有另一个对象,请查看外键的位置。我们可以说User
“具有”Profile
,因为profiles
表具有user_id
列。但是,如果在users
表中存在名为profile_id
的列,我们会说Profile
的User
,并且将交换belongs_to/has_one位置。
here是一个更详细的解释。
ok有道理,has_a是属性,而属于更多的是关系。 – Blankman 2010-09-28 01:48:15
好博客[在此](http://requiremind.com/differences-between-has-one-and-belongs-to-in-ruby-on-rails/)。 – 2013-11-17 10:03:00
所以说它真的很短: '产品belongs_to商店'的意思是'产品'表具有'shop_id'列 – 2014-09-24 12:31:58
这是关于外键坐落的位置。
class Foo < AR:Base
end
- 如果富
belongs_to :bar
,那么FOOS表有一个bar_id
列 - 如果富
has_one :bar
,那么酒吧表有一个foo_id
列
在概念层面上,如果你的class A
与class B
有关系has_one
,则class A
是class B
的母公司,因此您的class B
将与class A
有belongs_to
关系,因为它是class A
的孩子。
两者都表示1-1的关系。差异主要在于放置外键的位置,该外键位于声明belongs_to
关系的类别的表格中。
class User < ActiveRecord::Base
# I reference an account.
belongs_to :account
end
class Account < ActiveRecord::Base
# One user references me.
has_one :user
end
这些类的表可能看起来像:
CREATE TABLE users (
id int(11) NOT NULL auto_increment,
account_id int(11) default NULL,
name varchar default NULL,
PRIMARY KEY (id)
)
CREATE TABLE accounts (
id int(11) NOT NULL auto_increment,
name varchar default NULL,
PRIMARY KEY (id)
)
这是几乎相同的两年前已接受的答案已经说明。 – 2012-10-05 18:26:52
这几乎是一个更好的答案。 – typeoneerror 2015-07-10 02:42:35
has_one
和belongs_to
一般都是在一定意义上同它们指向其他相关模型。 belongs_to
确保此型号已定义foreign_key
。 has_one
确保其他型号has_foreign
的键已定义。
更具体地说,有两个边relationship
,一个是Owner
,其他的是Belongings
。如果只定义了has_one
,我们可以得到它的Belongings
,但不能从belongings
得到Owner
。要追踪Owner
,我们还需要在所属模型中定义belongs_to
。
,我想补充的是,假设我们一个额外的事情有如下型号协会
class Author < ApplicationRecord has_many :books end
如果我们只写了上述关联那么我们就可以通过,
@books = @author.books
但对于特定的书,我们无法获得通过相应的作者,
@author = @book.author
,使上面的代码工作的工作,我们需要的关联添加到Book模型也,这样
class Book < ApplicationRecord
belongs_to :author
end
这方法“作者”添加到Book模型。
有关模式的详细信息,请参阅guides
- 1. 在Rails中,使用“has_many with belongs_to”和“has_many with has_one”有什么区别?
- 2. Ruby on Rails中1对多关系上has_one和belongs_to的区别
- 3. 有什么区别`和$(Bash中有什么区别?
- 4. ==和===有什么区别?
- 5. ==和===有什么区别?
- 6. 有什么区别? :和||
- 7. ==和===有什么区别?
- 8. '=='和'==='有什么区别?
- 9. `&`和`ref`有什么区别?
- 10. 有什么区别:。!和:r!?
- 11. | 0和~~有什么区别?
- 12. Appender和〜有什么区别?
- 13. DataMapper - 为什么“有”和“belongs_to”?
- 14. belongs_to的HAS_ONE结构
- 15. HAS_ONE/belongs_to的方法
- 16. xtype和别名有什么区别?
- 17. 有什么区别
- 18. 有什么区别
- 19. 有什么区别?
- 20. 有什么区别?
- 21. 有什么区别?
- 22. 有什么区别
- 23. 有什么区别?
- 24. 有什么区别?
- 25. 有什么区别
- 26. 有什么区别
- 27. Microsoft.AspNet.WebApi.OData和Microsoft.Data.OData和Microsoft.AspNet.OData有什么区别?
- 28. Viterbi CYK和Probabilistic CYK算法有什么区别,有什么区别吗?
- 29. 使用“where”关联has_one和belongs_to模型
- 30. Rails的HAS_ONE和belongs_to的帮助
[有\ _one和属于\ _to在Rails中的区别?]的可能的重复项(http://stackoverflow.com/questions/861144/difference-between-has-one-and-belongs -to-in-rails) – Nakilon 2014-11-10 14:48:02