I’m trying to get this plugin to work:
It basically gets you all the cities and states in the United States.
However, it reads: “I havent added a rake task to populate the database
yet. But the YAML files are in vendor/plugins/geoinfo/lib/db/*.yml”
Alright, no problem, I’ll do it manually then. However, I look in the
file,
and I find stuff that looks like this:
-
!ruby/object:GeoinfoState
attributes:
name: STATE
abbr: ABBR
country: COUNTRY
type: TYPE
id: “ID”
-
!ruby/object:GeoinfoState
attributes:
name: ALASKA
abbr: AK
country: UNITED STATES OF AMERICA
type: STATE
id: “1”
-
!ruby/object:GeoinfoState
attributes:
name: ALABAMA
abbr: AL
country: UNITED STATES OF AMERICA
type: STATE
id: “2”
-
!ruby/object:GeoinfoState
attributes:
name: ARKANSAS
abbr: AR
country: UNITED STATES OF AMERICA
type: STATE
id: “3”
and so on
The file name is states.yml.
Now, my question is what exactly is this file? How do I use it? The
syntax
doesn’t exactly look like its a fixture…
I’m confused on how I can populate my db tables with that file. Does
anyone
know how? What is that file used for? how?
Thank you.
-David
On Tuesday, April 5, 2011 5:15:32 PM UTC-6, David Z. wrote:
and I find stuff that looks like this:
attributes:
country: UNITED STATES OF AMERICA
and so on
The file name is states.yml.
Now, my question is what exactly is this file? How do I use it? The syntax
doesn’t exactly look like its a fixture…
It is a YAML file (which, by default, your scaffolded fixtures are as
well).
It looks like the YAML was used to serialize some ruby objects.
For example (irb session using 1.8.7):
require ‘yaml’
class GeoinfoState
attr_accessor :attributes
end
x = GeoinfoState.new
x.attributes = { :name => “ALASKA”, :abbr => “AK”, :country => “UNITED
STATES OF AMERICA”, :type => “STATE”, :id => “1” }
puts YAML.dump(x)
— !ruby/object:GeoinfoState
attributes:
:type: STATE
:abbr: AK
:country: UNITED STATES OF AMERICA
:name: ALASKA
“1”
I’m confused on how I can populate my db tables with that file. Does anyone
know how? What is that file used for? how?
One way is to define a simple class (similar to what I did above) or
ensure
the geoinfo gem’s version is loaded. Then do something like:
states = YAML.load_file(…)
states.each do |s|
State.create!(:name => s.name, …) # where State is your model
end
If this isn’t a one-off action, you could even define a method to do
something like this in your State class:
require ‘yaml’
class State < ActiveRecord::Base
def self.import_from(filename)
YAML.load_file(filename).each do |s|
create!(…)
end
end
end
Thank you for the response
So basically it* doesn’t* populate a database table? But instead, I
retrieve
it directly from the yaml file?
-David
On Tuesday, April 5, 2011 5:53:42 PM UTC-6, David Z. wrote:
Thank you for the response
So basically it* doesn’t* populate a database table? But instead, I
retrieve it directly from the yaml file?
-David
Correct. It appears this file was just intended to store serialized
objects,
no database needed.