neo4j.rb现有节点之间的关系

时间:2014-04-30 13:59:35

标签: ruby-on-rails database-design neo4j

我是neo4j(2.3.0)的新手,我想玩关系属性 我使用了andreasronge的gem neo4j.rb 我创建了一个关系类

class Connection < Neo4j::Rails::Relationship
  property :connection_type, :machine, :quote => :exact # index both properties
  property :reference, :type => String
  property :updated_at
  property :created_at
end

和模型类

class Part < Neo4j::Rails::Model
  property :name, :type => String, :index => :exact
  property :updated_at
  property :created_at
  has_n(:subpart)
  has_n(:connect_to).to(Part).relationship(Connection)
  has_n(:connection_from).from(Part, :connect_to)
  validates_presence_of :name
end

我想在具有不同属性的两个部分之间创建多个连接 例如

part1= Part.new(name:'p1')
part2= Part.new(name:'p2')
part3= Part.new(name:'p3')
c1 = part1.connect_to << part2
c1.type = 'blue'
c2 = part1.connect_to << part2
c2.type = 'red'
c3 = part1.connect_to << part3
c3.type = 'blue'

但是c1,c2和c3类不是Connection而是Relationship,所以我不能指定属性类型。

1 个答案:

答案 0 :(得分:2)

我假设你正在使用Neo4j.rb 2.3,因为你打电话给&#34;关系&#34; has_n(:connect_to).to(Part).relationship(Connection)中的方法,它不会包含在版本3中,目前以alpha格式提供。但是,如果您使用的是3.0 alpha版本,那么您就遇到了问题。维基上的一些文档是指3.0版本,如果你进行一些搜索,你会发现很多版本1.0的文档并不适用。

在您的关系保持不变之前,您需要保存一个节点。您也无法按照您尝试的方式设置属性。这样做。

part1 = Part.create(name:'p1')
part2 = Part.create(name:'p2')
part3 = Part.create(name:'p3')

part1.connect_to << part2
part1.save

c1 = part1.rels.to_other(part2).first
c1.name = 'this is a name'
c1[:type] = 'blue'
c1.save

part1.connect_to << part2
part1.save
c2 = part1.rels.to_other(part2).to_a[1]
c2[:type] = 'red'

part1.connect_to << part3
part1.save
c3 = part1.rels.to_other(part3).first
c3[:type] = 'blue'
c3.save

您的财产将被存储。如果尚未在关系对象上定义新属性,则需要使用符号来创建新属性。在您的情况下,您已经能够访问关系中的name方法,因为您提前定义了它,如上所示。