これは可能ですか?Railsで2つのbelongs_toを実行できますか?
class CarActivity < ActiveRecord::Base
belongs_to :inspection
end
class Inspection < ActiveRecord::Base
belongs_to :car_activity # instead of using a has_one here
end
目標は以下のとおりです。
- は簡単にDBレコードを検査してください:検査は、検査をループしてチェックすることなく、関連するcar_activityを持っている場合(HIRB宝石を使用して)テーブルの列で見てオブジェクトのcar_activity参照。
- car_activity(つまり、
nil
に設定)のないすべての検査を取得することは、car_activitiesテーブルを照会(または参加)することなく、検査テーブルの簡単な直接クエリで行うことができます。
更新:おそらく、これらの目標を達成するためのより良い方法がありますか?
これはデータベース(またはRails)の仕組みではありません。これは、レコードの作成ごとに追加の更新クエリが必要であることを意味します。データベースが一貫性のない状態になるのは非常に簡単であり、リレーショナル・インテグリティを強制するために外部キー制約を使用できないことを意味します。なぜそれをやっているのか分かっていれば、ACIDは壊れてデータベースが非正規化されますが、この質問はリレーショナルデータベースの仕組みが理解できないことを示しています。 – meagar
@meagarはい、検査を作成するときに追加の更新クエリが必要ですが、それほど難しいのですか?これはデータベースに追加の制約を課しているので、リレーショナルの整合性が損なわれているとは思っていません。どのようにACIDプロパティ(原子性、一貫性、分離、耐久性)のどれが破られているのですか? DBには冗長性が導入されているという意味で非正規化されていますが、言及した2つの目標(?)を達成するためのよりよい方法がない限り、私はそれを実行します。 – Magne
より良い方法は、Bog標準を普遍的に受け入れる方法です:1つまたは他のテーブル内の単一の外部キー、およびRailsの 'belongs_to/has_one'です。 – meagar