82

次の状況を想像してください。

私はdogモデルとモデルを持っていhouseます。犬は家に所属することができ、家には多くの犬を飼うことができます。

Class Dog <  ActiveRecord::Base
  belongs_to :house
end

Class House < ActiveRecord::Base
  has_many :dogs
end

ここで、家を持たない犬も作りたいと想像してください。彼らは家に属していません。その関係構造を引き続き使用して、作成時に通知しないことはでき:house_idますか?

より良い習慣はありますか?

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に変更し て古い Rails の動作を維持するか、次のように追加のオプションを渡すだけで、false各定義でこの検証を無効にすることができます。belongs_tooptional: 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_id残すことができます。null

于 2012-05-05T14:36:46.800 に答える