Neo4j rb继承

Neo4j rb inheritance

我在 rails 应用程序中使用 Neo4j.rb。 我在多态性方面遇到了麻烦。

我有这样的东西我有一个用户 class 看起来像这样:

class User 
  include Neo4j::ActiveNode 

  #other properties

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

我有 SocialMediaContent class

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

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

end 

我想要一个图像 class 和一个视频 class 继承自社交媒体内容

这是否意味着在创建 SocialMediaContent 和用户之间的关系时我可以提供图像或视频对象而不是 SocialMediaContent,它在数据库中是如何发生的,我是否需要为图像提供一个节点作为嗯还是可以是普通物体

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

我想要这样的行为: 每个用户都有很多 SocialMediaContent,可以是图像或视频(目前)我现在不想指定是哪一个其中一个是图片,一个是视频。

任何人都可以建议我如何实现这个目标吗? 最后我可以存储一组 SocialMediaContent 而不是 has_many 关联(哪个更好?)

是的,你绝对可以做到。在 Neo4j.rb 中,当您从 ActiveNode class 继承 class 时,子 class 表示具有两个标签的节点。例如:

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,它将创建一个同时具有 ImageSocialMediaContent 标签的节点。如果您搜索具有 Image.findImage.where 等的图像...它将仅限于具有两个标签的节点。

至于关联,您应该能够在问题中指定它(尽管如果您没有 typerel_classorigin 选项)。