7

私は自分自身にRailsを教えており、テストプロジェクトとして、stackoverflowに似た簡単な質問/回答アプリをモックアップしています。

私の簡略化されたバージョンでは、次のようになります。

  • 質問
  • 答え
  • ユーザー(質問と回答の作成者)
答えは質問に属すると思います。

  • ユーザーと質問の間の適切な関係は何ですか?
  • ユーザーと回答の間の適切な関係は何ですか?

質問と回答は実際には「belong_to」ユーザーではなく、代わりに「has_oneuser」(作成者)の質問と回答であるように思われます。しかし、それも正しくないようです。なぜなら、ユーザーは「belong_toquestion」と「belong_toanswer」になるからです。

HABTMは3つのクラス間の答えですか?

多くの人がこの関係にとらわれていますね。:)

4

2 に答える 2

7

HABTMは3つのクラス間の答えですか?

いいえ。これらの関係のいずれにもHABTMは必要ありません。

  • ユーザーと質問の間の適切な関係は何ですか?
  • ユーザーと回答の間の適切な関係は何ですか?

どちらの場合も、これは1対多の関係です。ユーザーには多くの質問があり、ユーザーには多くの回答があります。

論理的な観点から、これを考慮してください。1つの質問を複数のユーザーが作成することはできず、1つの回答を複数のユーザーが作成することはできません。したがって、それは多対多の関係ではありません。

この場合、クラスは次のように設定する必要があります。

class User < ActiveRecord::Base
  has_many   :questions
  has_many   :answers
end

class Question < ActiveRecord::Base
  belongs_to :user
  has_many   :answers
end

class Answer < ActiveRecord::Base
  belongs_to :user
  belongs_to :question
end

一方、StackOverflowと同様のタグ付けシステムを使用している場合は、HABTM関係が必要になります。1つの質問には多くのタグを含めることができますが、1つのタグには多くの質問を含めることができます。代表的な例として、投稿には3つのタグ(ruby-on-rails、habtm、foreign-key-relationship)がありますが、ruby-on-railsタグには現在8,546の質問があります。

于 2010-01-13T06:34:30.263 に答える
0

Belongs_toは奇妙な名前です。has_manyの関係を把握し、belongs_toを反対側に配置するだけで、そのセマンティクスについて心配する必要はありません。

于 2010-01-13T05:55:25.480 に答える