3

保存するために、次のハッシュをActiveRecordに渡そうとしています。

[{
  "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."
  }]

私のルビークラスは次のようになります。

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の行と同じように作成されますが、フィールドにデータがありません。ここでステップが欠落していることはわかっていますが、どのステップかわかりません。また、Active Recordが独自のIDを作成するため、IDを含むハッシュに問題が発生しますか?

4

1 に答える 1

1

2番目の質問「その「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_idid

于 2013-02-10T18:30:54.253 に答える