这可能是我的一个问题,我一直在努力通过一些Rails和mongo样本来加快速度(这都是为了学习而不是为了工作。)这个当前的项目我从api和我得到一个JSON字符串把它放在mongo中。因此,改变文档结构并不是一种选择。然后我一直在尝试将其映射到Rails模型中,以便我可以使用数据。
JSON是一个包含许多包含许多LogLines的事务的报表。
来自文档的片段
< Report _id: 583 c3baac0baf90a7ee26f6e,
ReportName: "PtSomIntPerfThreeLevelTest-1480341940187",
TestName: "PtSomIntPerfThreeLevelTest",
Transactions: [{
"colId" => "50437d6c-49c1",
"InfoPlate" => "[0SXdokPL-R13VQZwi]",
"rowId" => "1",
"sortDate" => 1480341975952,
"transactionType" => "REQUEST",
"description" => "description text for my document",
"startDate" => "11/28/2016 14:06:15",
"startDateMS" => 1480341975952,
"endDate" => "11/28/2016 14:06:23",
"endDateMS" => 1480341983069,
"finalEndDate" => "11/28/2016 14:06:23",
"finalEndDateMS" => 1480341983069,
"completeDuration" => "7 seconds",
"completeDurationMS" => 7117,
"feedProcessingDuration" => "7 seconds",
"feedProcessingDurationMS" => 7117,
"logLines" => [{
"id" => "1062b1ca-0f04",
"timestamp" => 1480341975952,
"transactionType" => "REQUEST",
"transactionStep" => "RECEIVE",
"collationId" => "50437d6c-49c1-438a-9b8",
"runName" => "runName-1480341940187",
"msg" => "Import default",
"elapsedSeconds" => "0.0",
"elapsedMS" => 0,
"InfoPlate" => "[0SXdokPL-3rmxW3oH]"
},
我有一个报表模型和一个事务模型(我将在一次执行1之后执行LogLines)我的报表模型没问题我可以根据ID获取单个报表文档并返回报表。然后,我可以执行“report.transactions”并获取事务的json blob(几乎总是在报表中的多个事务)但是它不被识别为事务模型(将在下面发布所有代码)所以我不能说transaction.InfoPlate I得到一个没有这样的方法错误。我在我的模型中有关系,但我也有一个“字段:事务,类型:数组”,在查看mongoid上的轨道时,不在theres中。没有它,我什么都没得到,所以关系“embeds_many:transactions”不允许我获得report.transaction。对不起,如果这让我感到困惑,我的Rails术语很低。简短和汗水我想得到一份报告,然后获得交易,并能够做transaction.ColID并获得col ID。
我的目标是为文档报告,事务,LogLines的每个部分获取模型。我似乎不明白该怎么做。
报告模型(工作正常)
class Report
include Mongoid::Document
field :ReportName, type: String
field :TestName, type: String
field :Transactions, type: Array
field :ReportDurationMS, type: String
embeds_many :transactions
end
交易模型
class Transaction
include Mongoid::Document
field :colId, type: String
field :InfoPlate, type: String
field :rowId, type: String
field :sortDate, type: String
field :transactionDate, type: String
field :description, type: String
field :startDate, type: String
field :startDateMS, type: Integer
field :endDate, type: String
field :endDateMS, type: Integer
field :finalEndDate, type: String
field :completeDuration, type: String
field :completeDurationMS, type: Integer
field :feedProcessingDuration, type: String
field :feedProcessingDurationMS, type: Integer
field :logLines, type: Array
embedded_in :report, :inverse_of => :transactions
end
报告控制器(索引方法)调试记录器就在我身边的时候
def index
@reports = Report.all
Rails.logger.info("********* #{@reports.inspect} ***********")
end
事务控制器(这是我无法将事务作为模型返回)我从@ report.transactions返回一个事务,但它只是一个json字符串而不是ruby模型。或者至少我不能调用像@ transaction.colId这样的东西。只是没有返回这样的方法。事务是一个数组有很多,所以我尝试了transactions.first.InfoPlate,但仍然对我来说似乎Rails似乎是作为一个JSON字符串而不是对象返回的事务。?
class TransactionsController < ApplicationController
before_action :set_transaction, only: [:show, :edit, :update, :destroy]
def index
@report = Report.find(params[:report_id])
@transaction = @report.transactions
Rails.logger.info("********* report #{@report.inspect} ***********")
@transactions = @report.transactions
Rails.logger.info("********* transaction #{@transactions.inspect} ***********")
end
我的路线
resources :reports do
resources :transactions
end
答案 0 :(得分:0)
上面的帖子让我重新参与并匹配我的所有案例,这似乎有效。