要用机场名称为数据库种子,我使用application.yml定义机场集合:
AIRPORTS:
- name: "Charles de Gaulle"
city: "Paris"
country: "France"
- name: "Orly"
city: "Paris"
country: "France"
使用Rails命令(Rails c)进行测试,我得到了:
2.0.0-p247 :001 > ENV['AIRPORTS']
=> "[{"name"=>"Charles de Gaulle", "city"=>"Paris", "country"=>"France"}, {"name"=>"Orly", "city"=>"Paris", "country"=>"France"}]"
那是一根绳子!然后,当输入以下内容时,我出现了一个错误:
2.0.0-p247 :002 > YAML.load(ENV['AIRPORTS'])
Psych::SyntaxError: (<unknown>): did not find expected ',' or '}' while parsing a flow mapping at line 1 column 2
from /Users/Hassen/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/psych.rb:205:in `parse'
from /Users/Hassen/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/psych.rb:205:in `parse_stream'
from /Users/Hassen/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/psych.rb:153:in `parse'
from /Users/Hassen/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/psych.rb:129:in `load'
from (irb):2
from /Users/Hassen/.rvm/gems/ruby-2.0.0-p247/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
from /Users/Hassen/.rvm/gems/ruby-2.0.0-p247/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
from /Users/Hassen/.rvm/gems/ruby-2.0.0-p247/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
我所期望的(我想要的)是有一个对象数组,这样我就可以用以下代码为数据库种子:
YAML.load(ENV['AIRPORTS']).each do |airport|
AirPort.create airport
puts 'airport created: ' << airport.name
end
谢谢,
使用figaro gem
可以实现以下功能:
(eval ENV["AIRPORTS"]).each do |params|
Airport.create! params
puts "Airport created: #{params["name"]}"
我通常使用一个简单的初始化器load_config.rb
,比如:
YAML.load_file(Rails.root.join('config', 'application.yml'))['AIRPORTS'].each |params|
Airport.create! params
puts "Airport created #{params['name']}"
end