Ruby on rails 没有Rails的活动记录:如何将任意哈希传递给活动记录

Ruby on rails 没有Rails的活动记录:如何将任意哈希传递给活动记录,ruby-on-rails,ruby,activerecord,hash,Ruby On Rails,Ruby,Activerecord,Hash,我正在尝试将以下哈希传递到活动记录以进行保存: [{ "id"=>"WSECOUT", "realtime_start"=>"2013-02-10", "realtime_end"=>"2013-02-10", "title"=>"Reserve Bank Credit - Securities Held Outright", "observation_start"=>"1989-03-22", "observation_end"=

我正在尝试将以下哈希传递到活动记录以进行保存:

[{
  "id"=>"WSECOUT", 
  "realtime_start"=>"2013-02-10", 
  "realtime_end"=>"2013-02-10", 
  "title"=>"Reserve Bank Credit - Securities Held Outright", 
  "observation_start"=>"1989-03-22", 
  "observation_end"=>"2013-02-06", 
  "frequency"=>"Weekly, Ending Wednesday", 
  "frequency_short"=>"W", 
  "units"=>"Billions of Dollars", 
  "units_short"=>"Bil. of $", 
  "seasonal_adjustment"=>"Not Seasonally Adjusted", 
  "seasonal_adjustment_short"=>"NSA", 
  "last_updated"=>"2013-02-08 08:32:33-06", 
  "popularity"=>"42", 
  "notes"=>"The amount of securities held by Federal Reserve Banks. This quantity is the cumulative result of permanent open market operations: outright purchases or sales of securities, conducted by the Federal Reserve. Section 14 of the Federal Reserve Act defines the securities that the Federal Reserve is authorized to buy and sell."
  }]
我的ruby类如下所示:

require 'rubygems'
require 'active_record'  
require 'logger'

ActiveRecord::Base.establish_connection(  
:adapter => "mysql2",  
:host => "localhost",  
:username => "root",
:password => "*********",
:database => "fred"  
)  

class Series < ActiveRecord::Base

  attr_accessible :id, :realtime_start, :realtime_end, :title, :observation_start,
              :observation_end, :frequency, :frequency_short, :units, :units_short, 
              :seasonal_adjustment, :seasonal_adjustment_short, :last_updated, 
              :popularity, :notes

end

require_relative 'wsecout'
@series = Wsecout.new.getSeries "wsecout"
@series = @series['series']

test = Series.create(@series)
需要“rubygems”
需要“活动记录”
需要“记录器”
ActiveRecord::Base.建立\u连接(
:adapter=>“mysql2”,
:host=>“localhost”,
:username=>“root”,
:password=>“*******”,
:database=>“fred”
)  
类系列

@series变量包含散列。当我运行这段代码时,对象是按照mysql中的行创建的,但是字段中没有数据。我知道我在这里遗漏了一步,但我不知道是哪一步。另外,由于Active Record创建了自己的id,因此我的包含id的哈希是否会有问题?

回答第二个问题“将该“id”映射到名为:series\u id的新字段”:

或者,如果要根据某些条件更改多个关键点,请在if条件下使用它,如下所示:

@series['series'][0].keys.each do |k|
  if(k == 'id')
    @series['series'][0]['series_id'] = @series['series'][0][k]
    @series['series'][0].delete(k)
  end
end

这将遍历散列的每个键,如果该键与
id
匹配,则添加另一个具有相同值的键
series\u id
,并删除
id

,如果第一个示例正确,则@series包含一个具有一个散列的数组。试试
@series['series'][0]
之类的东西。或者,您可以发布
put@series['series']的输出。检查
。谢谢。您知道如何将散列中的:id映射到与操作记录:id不同的:id吗?在这种情况下,哈希的“id”为“WSECOUT”。在我使用series.create(@series)时,是否有方法将该“id”映射到名为:series\u id的新字段?我尝试将“h”替换为@series,并收到以下错误:“`block in':意外返回(LocalJumpError)'糟糕!刚刚更新了答案,删除了返回声明首先感谢您的帮助!这非常有效,我正在更新我的原始问题以反映您的更改。嘿。。我又更新了我的答案。检查一下。我只是觉得在您的案例中循环使用散列键没有意义。:)
@series['series'][0].keys.each do |k|
  if(k == 'id')
    @series['series'][0]['series_id'] = @series['series'][0][k]
    @series['series'][0].delete(k)
  end
end