想象一下以下情况:
我有dog
模型和house
模型。狗可以属于房子,房子可以有很多狗,所以:
Class Dog < ActiveRecord::Base
belongs_to :house
end
Class House < ActiveRecord::Base
has_many :dogs
end
现在,想象一下我也想创造没有房子的狗。他们不属于房子。我是否仍然可以使用该关系结构,并且在创建时只是不通知:house_id
?
有更好的做法吗?
Obs。:我使用这个类比来简化我的问题,但我的真实情况是:我有一个模型,用户可以生成它的实例。他还可以创建这些实例的集合,但他可以将一个实例留在集合之外。
答案 0 :(得分:280)
在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定义,只传递一个额外的 option optional:如下所示:
class Book < ActiveRecord::Base belongs_to :author, optional: true end
答案 1 :(得分:22)
我认为这绝对是正常的做法。
您可以将house_id
的{{1}}值保留在数据库中,以用于不属于其他模型的模型。