2

ポリモーフィック アソシエーションが (データ モデリングの意味で)何であるかを知りたいです。それらが一般的であることを理解しており、Rails でそれらを実装する方法を学びたいからです。

この用語は、例えば、

  • web_post_country
    • web_postに (件名として) > 0 または 1 か国が含まれる
    • 国が0 個以上の web_postsで記述されている
  • web_post_country
    • web_postには (件名として) 0 または 1 つの地域があります
    • 地域は0 個以上の web_postsによって記述されます
  • region_country
    • 地域1 か国にある
    • には0 個以上の地域があります

? (これらは常に実装するのが少し難しいです)。

それらが何であるかがわかったら、2番目の質問であるRailsでそれらを実装する方法について、ここで質問と回答を研究する準備が整います。

これがこのフォーラムの範囲を超えていないことを願っています...私の最終的な目標は、ポリモーフィックな関連付けの Rails 実装を学ぶことです。

4

2 に答える 2

1

通常の関連付けは、主キー/外部キーによって作成されます。

User "Bob", id: 1
Book "The Sponge", id: 1, user_id: 1

外部キーuser_idは、ユーザーの主キーを参照します。


ポリモーフィックな関連付けは、主キー/外部キーに加えて、オブジェクトの「タイプ」で機能します。

User "Bob", id: 1
Book "The Sponge", id: 1, owner_id: 1, owner_type: "User"

ここでは、本の所有者を取得するために両方のフィールドが必要です。

所有者の id は 1 であり、所有者のタイプ (クラス) は "User" であることがわかっているので、id = 1 の User を見つけてみましょう。


これは、複数のタイプの所有者を持つことができることを意味します: poly (複数) - morphic (タイプ、クラス)

たとえば、Client オブジェクトが所有する Book を持つことができます。

Client "XXX", id: 12
Book "Catalog", id: 2, owner_id: 12, owner_type: "Client" # => owner is client #12
Book "Anoying", id: 3, owner_id: 20, owner_type: "User" # => owner is user #20

Rails フレームワークでポリモーフィックな関連付けを実装する方法:

class Book < ActiveRecord::Base
  belongs_to :owner, polymorphic: true 
end

class User < ActiveRecord::Base
  has_many :books, as: :owner
end

class Client < ActiveRecord::Base
  has_many :books, as: :owner
end

次に、次の行で本の所有者を見つけることができます。

book = Book.first
book.owner # => return the owner of the book, can be either Client or User
于 2013-09-17T20:44:16.443 に答える
0

モデル名を簡単にした Rails の例を次に示します。

class Comment
  belongs_to :commentable, polymorphic: true
end

class Article
  has_many :comments, as: :commentable
end

class Photo
  has_many :comments, as: :commentable
end

ここでの関係は自明だと思います。ポリモーフィズムと Rails の詳細については、こちらを参照してください。

于 2013-09-17T20:44:04.403 に答える