Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何保存对模型的响应_Ruby On Rails_Arrays_Hash_Mongoid - Fatal编程技术网

Ruby on rails 如何保存对模型的响应

Ruby on rails 如何保存对模型的响应,ruby-on-rails,arrays,hash,mongoid,Ruby On Rails,Arrays,Hash,Mongoid,我试图将此响应从API保存到模型字段。我不能保存它,因为mongoid说这不是字符串。我尝试将其保存为数组和散列。不走运 我怎样才能正确地将它保存在一个字段中,或者正确地格式化它,这样我就可以将它保存为一个数组或散列,这样我就可以稍后调用它。我想可能是这样的,但感觉不对 transactions.rb field :accounts, type: Array.new ... def account_pull accounts_respons

我试图将此响应从API保存到模型字段。我不能保存它,因为mongoid说这不是字符串。我尝试将其保存为数组和散列。不走运

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

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>
“银行储蓄”}、@institution\u type=“fake\u institution”、@available\u balance=1203.42、@current\u balance=1274.93、@subtype=nil、@number={“routing”=>“0210000021”、“account”=>“990009606”、“wireRouting”=>“0210000021”}、@institution\u type=“fake\u institution”、@available\u balance=1081.78、@available\u balance=1253.32、,@subtype=nil、@numbers={“routing”=>“0210000021”、“account”=>“990001702”、“wireRouting”=>“0210000021”}>、#“5204”、“name”=>“Bank Premier Checking”}、@institution\u type=“fake\u institution”、@available\u balance=7205.23、@current\u balance=7255.23、@subtype=nil、@numbers={“routing”=>“0210000021200021”、“account”=>“990005204”、“wireRouting”=>“0210000021200021”}、\12500、,“number”=>“3002”、“name”=>“银行信用卡”}、@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={}、@未决的_-mfa_-questions=”、@type=nil>
试试这段代码

将accounts字段类型更改为hash

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
或者,您可以尝试获得初始响应,以避免许多转换(如果可能)