0

私は、多くの ActiveRecord モデルがそれに関連付けられた会話を持つことができるプロジェクトに取り組んでいます。ユーザーは、サイトのほぼすべての側面について話し合うことができます。これをどのように実装するかについて、2 つの考えがあります。

1) 会話ではなくアセット内で belongs_to を使用します - 会話はそのアセットをまったく認識しません

class Product< ActiveRecord::Base
  belongs_to :conversation
end

class PurchaseOrder < ActiveRecord::Base
  belongs_to :conversation
end

2) 会話で belongs_to, :polymorphic => true を使用する

class Conversation < ActiveRecord::Base
  belongs_to :asset, :polymorphic => true
end

class Product < ActiveRecord::Base
  has_one :conversation, :as => :asset
end

class PurchaseOrder < ActiveRecord::Base
  has_one :conversation, :as => :asset
end

この関係をモデル化する正しい方法はどれですか? その関係を一言で表すならば、「商品・発注書の会話は一つかもしれません」。

4

1 に答える 1

0

どちらかといえば、関係のあるモデルが他のモデルについて何を知る必要があるかにかかっていると思います。あなたの説明から、この場合は2番目のアプローチがより適切であるように思えます。なんで?

  • Productおよびモデルは、PurchaseOrderそれらに関する会話とは別に存在できるという意味で、自己制約のあるエンティティです。したがって、おそらく、会話を追跡するためにこれらのモデルを汚染する外部キーを望まないでしょう。その意味で、関係は控えめであるべきです。
  • AConversationは、関連付けられているエンティティに論理的な依存関係があるため、asset_id(およびasset_type) 外部キーがあり、おそらく妥当です。

これは非常によくある質問で、私もいつも少し考えてしまいます。それは必ずしも明らかではありません。ここに問題を考慮した良い記事があります

于 2010-07-15T19:03:00.920 に答える