当模型具有另一个模型的一个或零个实例时,可以使用has_one关联吗?

时间:2013-09-25 12:44:31

标签: ruby-on-rails associations has-many has-one

RailsGuides说:

http://guides.rubyonrails.org/association_basics.html has_many“关联表示模型的每个实例都有零个或多个另一个模型的实例。”

“has_one关联还与另一个模型建立一对一的连接,但语义(和后果)有些不同。这种关联表明模型的每个实例都包含或拥有另一个模型的一个实例。”

这是否意味着如果我想建立一个关联,模型的每个实例都有零或另一个模型的一个实例,最好的方法是使用has_many而不是has_one?如果我使用has_one会遇到什么问题?

感谢。

2 个答案:

答案 0 :(得分:16)

has_one是正确的 - 除非您自己添加validations,否则设置的关系不是强制性的。

让它更清晰 -

class Post < ActiveRecord::Base
  has_one :author

end

class Author < ActiveRecord::Base
  belongs_to :post 

end

如果没有验证,给定的post可以有作者(但不能超过一个) - 但是作者不是必需的。

答案 1 :(得分:4)

除非您定义特定的验证,has_one只是阻止您拥有与您的模型关联的多个对象。 零是好的。