如何保存对模型的响应

How to save a response to a model

我正在尝试将此响应从 API 保存到模型字段。我无法保存它,因为 mongoid 说这不是字符串。我尝试将它保存为数组和哈希。运气不好。

我怎样才能将它正确地保存在一个字段中或正确地格式化它以便我可以将它保存为数组或散列以便我可以调用它later.I我想可能是这样的但感觉不对.

transactions.rb

    field :accounts,        type: Array.new
    ...

    def account_pull
       accounts_response = Api.set_user(access_token, ['auth'])    
       self.accounts = accounts_response.accounts
       model.save
    end
end

这是我收到的完整回复的示例。

#<Api::User:0xb7e9f2c @accounts=[#<Api::Account:0xb7b6eb0 @id="QPO8Jo8vdDHMepg41PBwckXm4KdK1yUdmXOwK", @name=nil, @type="depository", @meta={"number"=>"9606", "name"=>"Bank Savings"}, @institution_type="fake_institution", @available_balance=1203.42, @current_balance=1274.93, @subtype=nil, @numbers={"routing"=>"021000021", "account"=>"9900009606", "wireRouting"=>"021000021"}>, #<Api::Account:0xb7b6ba4 @id="nban4wnPKEtnmEpaKzbYFYQvA7D7pnCaeDBMy", @name=nil, @type="depository", @meta={"number"=>"1702", "name"=>"Bank Checking"}, @institution_type="fake_institution", @available_balance=1081.78, @current_balance=1253.32, @subtype=nil, @numbers={"routing"=>"021000021", "account"=>"9900001702", "wireRouting"=>"021000021"}>, #<Api::Account:0xb7b68e8 @id="XARE85EJqKsjxLp6XR8ocg8VakrkXpTXmRdOo", @name=nil, @type="depository", @meta={"number"=>"5204", "name"=>"Bank Premier Checking"}, @institution_type="fake_institution", @available_balance=7205.23, @current_balance=7255.23, @subtype=nil, @numbers={"routing"=>"021000021", "account"=>"9900005204", "wireRouting"=>"021000021"}>, #<Api::Account:0xb7b66cc @id="pJPM4LMBNQFrOwp0jqEyTwyxJQrQbgU6kq37k", @name=nil, @type="credit", @meta={"limit"=>12500, "number"=>"3002", "name"=>"Bank Credit Card"}, @institution_type="fake_institution", @available_balance=9930, @current_balance=2275.58, @subtype=nil, @numbers={}>], @transactions=[], @permissions=["auth"], @access_token="test_chase", @api_res="success", @info={}, @pending_mfa_questions="", @type=nil>

试试这个代码

将帐户字段类型更改为散列

class Transactions
  include Mongoid::Document
  field : accounts :type => Hash
end

然后你可以将响应转换为哈希后保存

  def account_pull
   response = Api.set_user(access_token, ['auth'])
   accounts = response.accounts
   accounts_hash = Hash[accounts.map.with_index { |x, i| [i, x] }]
   self.accounts = accounts_hash
   self.save
 end

您的响应既不是字符串也不是数组或哈希:它是一个 API::User 和一个 API::Account 数组。

也许使用 as_json 将它转换为一个简单的结构就可以了:

model.user = api_user.as_json
model.save

或者,您可以尝试获取初始响应,以避免多次转换(如果可能)。