2017-12-14 4 views
0

これは可能ですか?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テーブルを照会(または参加)することなく、検査テーブルの簡単な直接クエリで行うことができます。

更新:おそらく、これらの目標を達成するためのより良い方法がありますか?

+2

これはデータベース(またはRails)の仕組みではありません。これは、レコードの作成ごとに追加の更新クエリが必要であることを意味します。データベースが一貫性のない状態になるのは非常に簡単であり、リレーショナル・インテグリティを強制するために外部キー制約を使用できないことを意味します。なぜそれをやっているのか分かっていれば、ACIDは壊れてデータベースが非正規化されますが、この質問はリレーショナルデータベースの仕組みが理解できないことを示しています。 – meagar

+0

@meagarはい、検査を作成するときに追加の更新クエリが必要ですが、それほど難しいのですか?これはデータベースに追加の制約を課しているので、リレーショナルの整合性が損なわれているとは思っていません。どのようにACIDプロパティ(原子性、一貫性、分離、耐久性)のどれが破られているのですか? DBには冗長性が導入されているという意味で非正規化されていますが、言及した2つの目標(?)を達成するためのよりよい方法がない限り、私はそれを実行します。 – Magne

+1

より良い方法は、Bog標準を普遍的に受け入れる方法です:1つまたは他のテーブル内の単一の外部キー、およびRailsの 'belongs_to/has_one'です。 – meagar

答えて

-1

多態性を試しましたか?

class CarActivity < ActiveRecord::Base 
    belongs_to :inspection 
end 
class Inspection < ActiveRecord::Base 
    belongs_to : car_activity, polymorphic: true 
end 

Ruby on Rails Guide状態「多型団体と、モデルは、単一の協会に、複数の他のモデルに属することができます」。

+0

これはポリモーフィックな関連付けの完全な誤用ですが、ここでは適用できません。 – meagar

+0

@ meagarフェア十分です。 –

関連する問題