82

想象以下情况:

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

Class Dog <  ActiveRecord::Base
  belongs_to :house
end

Class House < ActiveRecord::Base
  has_many :dogs
end

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

有更好的做法吗?

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

4

2 回答 2

349

在 Rails 5 中注意这一点......

#belongs_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

于 2016-03-03T15:02:51.640 回答
27

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

您可以在数据库中保留不属于其他模型的值house_idnull

于 2012-05-05T14:36:46.800 回答