项目并不复杂,但是找到解决蒙古式关系的方法却很困难。很高兴找到一些深入的解释。
我无法使我的代码正常工作,但是我对其进行了设置,因此设法找到了Mongoid_Alize:https://github.com/dzello/mongoid_alize
但是,当我使用alize或alize_to / _from进行操作时,控制台向我返回了关于Mongoid :: Ruby2.3.3 / lib / ruby / gems / 2.3.0 / bundler / gems / mongoid_alize-b9175f4e3165 / lib中的关系的错误/mongoid/alize/macros.rb:79:in`_alize_relation_types'“
我还包括了急切加载的identity_map_enabled:在mongoid.yml中为true
所以这是代码:
Currency.rb
class Currency
include Mongoid::Document
include Mongoid::Alize
field :name, type: String
field :state, type: String
field :code, type: Integer
field :unit, type: Integer
has_many :currency_value
has_many :value, :class_name => 'Value', :inverse_of => :currency
alize_to :value
end
Value.rb
class Value
include Mongoid::Document
include Mongoid::Alize
field :date, type: DateTime
field :buying, type: String
field :middle, type: String
field :selling, type: String
belongs_to :value_currency, :class => 'Currency', :inverse_of => :currency_value
belongs_to :currency, :class_name => 'Currency', :inverse_of => :value
alize_from :currency
end
ApiService.rb
class ApiService
# Has some api data coming from external function getApiData
def update()
@arrayOfHashes= getApiData() #array of hashes
@arrayOfHashes.each do |hash|
@currency = Currency.new({
name: hash["Name"],
state: hash["State"],
code: hash["Currency code"],
unit: hash["Unit"]
})
@currency.create_value(
date => hash["Date of value"],
buying => hash["Value when buying"],
middle => hash["Middle value"],
selling => hash["Value when selling"])
@currency.save
end
return @currency
end
end
预期结果:将所有13个迭代及其关系保存在MongoDB中。
在这里我不得不听一些解释,因为我没有灵感并且坚持到位。我在编程方面有一定的背景,并且我觉得它不应该那么复杂。
我可以保存货币模型或值,但不能同时保存它们的关系。另一种想法是通过添加自定义的foreign_id并在模型中创建一个将填充哈希的方法来手动完成此操作。但这可能会导致将来的性能问题。
感谢您的帮助,谢谢:)