4

Rails 3 の多対多の関係について読んだことがありますが、has_many :throughほとんどの場合に使用する必要がある HABTM が「非推奨」になっていることがわかりました。

Join Model に明確な名前が付けられている例をたくさん見ました。たとえば、Magazine、Subscriber = Subscriptions です。

しかし、私の場合、適切な名前が見つかりません:/知っておくべき規則はありますか? トップには 1 個または * 個のアイデアが含まれており、アイデアは 1 個または * 個のトップに含まれる場合があります。最後に、これはこれに対する最善の方法ですか?

これが私のコードです:

class Top < ActiveRecord::Base  
  has_many :???  
  has_many :ideas, :through => :???  
end

class Idea < ActiveRecord::Base  
  has_many :???  
  has_many :ideas, :through => :???  
end

class ??? < ActiveRecord::Base  
  belongs_to :top  
  belongs_to :idea  
end

また、has_many を使用することで、結合テーブルを手動で作成する必要がなくなります。

助けてくれてありがとう:)

編集:
トップはランキングのようなものです。したがって、トップは、投票によってソートされたアイデアの表現です。アイデアは(一般的に)アイデアです。たとえば、Ruby on Rails のベスト プラクティスや、「HABTM の代わりに has_many スルーを使用する」というアイデアのトップになることができます。
したがって、トップには 1 つまたは * のアイデアが含まれ、アイデアは 1 つまたは * のトップに属することができます。アイデアの場合は、belongs_to_many ですが、ror には存在しません。

4

2 に答える 2

3

まず第一に、アイデアには本当に多くのサブアイデアがありますか? それは、正常化/再検討する必要がある奇妙な関係のように聞こえます。

@gabrielhilal は良い提案をしますが、少しバックアップしてテーブルIdeaTopテーブルの名前を変更し、不透明度を少し下げることをお勧めします。たとえば、Top が Topic の略である場合、TopicIdeaの「コメント」のように見えます。その場合、スルー クラスは TopicComment などになる可能性があります。

とにかく、これらのテーブルの名前を変更して、もう少し意味のあるものにすることから始めるべきだと思います(または、理解できるように説明してください)。次に、2つのテーブルの組み合わせを使用して結合テーブルに名前を付けるという@gabrielhilalの提案に進みます— <strong >Product + Sale = Invoice (invoice が結合テーブル) のように、3 番目のテーブルに固有の意味 (または独自の属性) がない限り、これは一般的な方法です。

于 2012-06-18T16:20:23.613 に答える
1

適切な名前を提案するには、 との意味、IdeaおよびTopそれらの関係 (多対多である理由) を理解する必要があります。
ただし、このクラスに意味のある名前が見つからない場合は、IdeaTopまたはTopIdea...のようなものを使用できます。

于 2012-06-18T15:58:13.320 に答える