3

我正在尝试将以下哈希传递给 Active Record 以保存:

[{
  "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)

@series 变量包含哈希。当我运行此代码时,该对象被创建为 mysql 中的行,但是字段中没有数据。我知道我在这里错过了一步,但我无法弄清楚是哪一步。另外,我的 Hash 包含一个 id 会不会有问题,因为 Active Record 创建了它自己的 id?

4

1 回答 1

1

回答您的第二个问题“将“id”映射到名为 :series_id 的新字段”:

@series['series'][0]['series_id'] = @series['series'][0]['id']
@series['series'][0].delete('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_id具有相同值的键并删除id.

于 2013-02-10T18:30:54.253 回答