У меня приложение , где я загружаю кучу электронных книг вместе с метаданными в Neo4j с целью создания дерева каталогов IPFS для ввода в другого приложения .
Это приложение rails, поэтому у меня есть класс Book
:
class Book
include Neo4j::ActiveNode
property :title, type: String
property :author, type: String
property :created_at, type: DateTime
property :updated_at, type: DateTime
has_many :in, :contexts, type: :FOR
has_one :out, :cover, type: :CVR, model_class: :Content
has_one :out, :content, type: :DAT
end
В задаче rake для экспорта в IPFS я использую следующее чтобы выполнить запрос:
q = Neo4j::ActiveBase.current_session.query(
"MATCH path = (n:Context)-[s:SUB*]->(m:Context)-[f:FOR]->(o:Book) WHERE n.name = '∅' RETURN DISTINCT path LIMIT 500"
)
Это возвращает пути, которые я хочу, но q.first.path.nodes.first
(и все другие узлы) Neo4j::Core::Node
s. Я хочу получить доступ к отношениям cover
и content
моего класса Book
, но не могу. Например:
q.each do |ret|
nodes = ret.path.nodes
nodes.shift # remove ∅
book = nodes.pop
path = nodes.map(&:name)
if book.content
system('ipfs', 'files', 'cp', "/ipfs/#{book.content.ipfs_id}", "/#{path.join('/')}/index.epub")
end
⋮