关于空属于关联的最佳实践

设想下面的情况:

我有一个 dog型和一个 house型。一只狗可以属于一个房子,一个房子可以有很多只狗,所以:

Class Dog <  ActiveRecord::Base
belongs_to :house
end


Class House < ActiveRecord::Base
has_many :dogs
end

现在,想象一下我还想创造一些没有房子的狗。他们不属于 House。我是否仍然可以使用这种关系结构,而在创建 :house_id时只是不通知它?

还有更好的办法吗?

我使用这个类比来简化我的问题,但是我的真实情况是: 我有一个模型,用户可以生成它的实例。他还可以创建这些实例的集合,但是可以将实例保留在集合之外。

33500 次浏览

我认为这是绝对正常的做法。

你可以把 house_idnull值留在数据库中,因为它们不属于其他模型。

在 Rails 5中要小心这个..。

默认情况下 # properties _ to 是必需的

从现在开始,每个 Rails 应用程序都将有一个新的配置 选项 config.active_record.belongs_to_required_by_default = true 将触发一个验证错误时,试图保存一个模型,其中 belongs_to关联不存在。

config.active_record.belongs_to_required_by_default可以改为 false和这保持旧的 Rails 行为,或者我们可以禁用这个 验证每个 belongs_to定义,只需传递一个额外的 备选方案 optional: true如下:

class Book < ActiveRecord::Base
belongs_to :author, optional: true
end

发信人: https://sipsandbits.com/2015/09/21/whats-new-in-rails-5/#belongs_toisrequiredbydefault