有关空的belongs_to关联的最佳实践

想象一下以下情况:

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

 Class Dog < ActiveRecord::Base belongs_to :house end Class House < ActiveRecord::Base has_many :dogs end 

现在,想象我也想创造没有房子的狗。 他们不属于房子。 我仍然可以使用这种关系结构,并且在创build它时根本不通知:house_id

有更好的做法吗?

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

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

对于不属于其他的模型,您可以将数据库中的值为null house_id

在Rails 5中小心这个…

belongs_to是默认需要的

从现在开始,每个Rails应用程序都会有一个新的configuration选项config.active_record.belongs_to_required_by_default = true,当试图保存不存在belongs_to关联的模型时,会触发validation错误。

config.active_record.belongs_to_required_by_default可以更改为false,并保持旧的Rails行为,或者我们可以在每个belongs_to定义上禁用此validation,只需传递一个附加选项optional:true,如下所示:

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

来自: http : //blog.michelada.io/whats-new-in-rails-5