1

Rails アプリで Neo4j.rb を使用しています。ポリモーフィズムに問題があります。

私はこのようなものを持っています。私は次のようなUsersクラスを持っています:

class User 
  include Neo4j::ActiveNode 

  #other properties

  has_many: out, :social_media_content, model_class: :SocialMediaContent
end

私は SocialMediaContent クラスを持っています

class SocialMediaContent   
  include Neo4j::ActiveNode # Is it necessary?

  property :first_name, type: Integer
  property :first_name, type: Integer

end 

ソーシャル メディア コンテンツを継承するイメージ クラスとビデオ クラスが必要です。

これは、SocialMediaContent と User の間の関係を作成しているときに、SocialMediaContent の代わりに画像またはビデオ オブジェクトを提供できることを意味しますか?データベースでどのように行われますか?画像用のノードも必要ですか?通常のオブジェクト。

すなわち

class Image < SocialMediaContent
  include Neo4j::ActiveNode #Do i have to do this?

私はこのような動作が必要です:すべてのユーザーには、画像またはビデオのいずれかである多くの SocialMediaContent があります (今のところ)、どれが画像でどれがビデオかを指定したくありません。

誰も私がこれを達成する方法を提案できますか? 最後に、has_many 関連付けの代わりに SocialMediaContent の配列を格納できますか (どちらが優れていますか?)

4

1 に答える 1

2

はい、間違いなくできます。Neo4j.rb では、クラスからクラスを継承するとActiveNode、子クラスは両方のラベルを持つノードを表します。例えば:

class SocialMediaContent
  include Neo4j::ActiveNode # This is necessary for the parent
end

class Image < SocialMediaContent
  # No include needed
end

class Video < SocialMediaContent
  # No include needed
end

これを行うと、との両方のラベルImage.createを持つノードが作成されます。、などで画像を検索すると、両方のラベルを持つノードのみに制限されます。ImageSocialMediaContentImage.findImage.where

関連付けに関しては、質問にあるとおりに指定できるはずです(ただし、、、またはオプションがない場合は文句を言うでしょtyperel_classorigin

于 2015-10-19T13:56:45.987 に答える