一个型号上的has_one与另一个型号上的belongs_to之间有区别吗?

时间:2014-01-28 22:36:53

标签: ruby ruby-on-rails-3

我知道belongs_to将外键放在声明模型上,而has_one将它放在另一个模型上。这是否意味着这个例子没有区别?

class Category
 belongs_to :blog
end

class Blog
end

class Blog
 has_one :category
end

class Category
end

我唯一能看到的是第二个例子的命名法更有意义。

2 个答案:

答案 0 :(得分:2)

belongs_to期望外键在其表上,而has_one期望它在另一个上:

# here the Category table will need to have a blog_id field
class Category
  belongs_to :blog
end

# the blog table won't need anything    
class Blog
  has_one :category
end
引言下的

has_one类似于has_many,但在查询表时会向sql语句添加LIMIT 1子句。

答案 1 :(得分:1)

正如您所指出的,差异在于数据库。具有belongs_to引用的模型必须包含关联的外键。使用has_one时,它会在相关模型上找到一个外键。