关于空belongs_to关联的最佳实践

时间:2012-05-05 14:14:08

标签: ruby-on-rails ruby activerecord

想象一下以下情况:

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

Class Dog <  ActiveRecord::Base
  belongs_to :house
end

Class House < ActiveRecord::Base
  has_many :dogs
end

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

有更好的做法吗?

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

2 个答案:

答案 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

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

答案 1 :(得分:22)

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

您可以将house_id的{​​{1}}值保留在数据库中,以用于不属于其他模型的模型。