2010-12-03 6 views
0

J'essaye de concevoir un schéma pour l'attribut d'emplacement dans mon application de rails.Table de schéma de base de données d'emplacement dans les rails

Si tel est la bonne conception

class CreateLocations < ActiveRecord::Migration 

    def self.up 
    create_table :locations do |t| 
     t.string :zip   
     t.string :city,  :null => false 
     t.string :state,  :null => false 
     t.string :country, :null => false 
     t.string :latitude 
     t.string :longitude 
     t.timestamps 
    end 
    end 

end 
+0

Que demandez-vous? –

Répondre

0

moins qu'il y ait une raison particulière que vous ne pensez pas que cela résout votre solution, syntaxiquement il semble juste pour moi. La beauté des rails est que si cela ne convient pas, vous pouvez migrer le modèle de données pour ajouter plus d'attributs lorsque vous en avez besoin.

2

Je suppose que cela dépend de la façon dont vous voulez que le modèle s'intègre à votre formulaire. Je suppose que les données du modèle Site sont renseignées par l'utilisateur, via le géocodage du fichier zip sur Yahoo/Google ou à partir d'une table de recherche de codes postaux statiques. Quoi qu'il en soit, voici la migration de mon modèle Location, que je remplis à partir d'une table de recherche statique via le code postal entré par l'utilisateur (zip) - ceci est rempli dans le formulaire principal par un appel AJAX qui envoie une requête de géocodage Google si elle ne peut pas trouver le code postal (la table devient assez vieux maintenant)

class CreateLocations < ActiveRecord::Migration 
    def self.up 
    create_table :locations do |t| 
     t.primary_key :id 
     t.string :category 
     t.string :placename 
     t.string :address_1 
     t.string :address_2 
     t.string :address_3 
     t.string :town 
     t.string :region 
     t.string :postcode 
     t.float :lon 
     t.float :lat 

     t.integer :local_authority_id 
     t.integer :hpu_id 
     t.integer :region_id 
     t.integer :country_id 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :locations 
    end 
end 

Je suis allé avec des nombres à virgule flottante pour le LON/lat bien que l'utilisation d'une chaîne est probablement tout aussi bien sinon mieux.

J'ai utilisé des modèles et des tableaux séparés pour les subdivisions géographiques de la Région, du Pays et du Hpu (Health Protection Unit - une division régionale britannique pour les services nhs). Un certain nombre de raisons à cela, y compris la restriction de l'entrée de l'utilisateur pour ces menus déroulants, qui pourraient encore être édités par les administrateurs (Régions et Pays sont des unités stables mais les Hpus subissent des changements de nom atm). Les autres raisons incluaient l'expansion des modèles géographiques pour inclure des informations supplémentaires telles que les informations de shapefile (pour afficher les bordures des unités - non représentées dans cette migration car les shapefiles sont ajoutés ultérieurement en utilisant les outils d'import de PostGIS), et utiliser les associations fournies par ces modèles supplémentaires

class CreateRegions < ActiveRecord::Migration 
    def self.up 
    create_table :regions do |t| 
     t.primary_key :id 
     t.string :name 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :regions 
    end 
end 

class CreateHpus < ActiveRecord::Migration 
    def self.up 
    create_table :hpus do |t| 
     t.primary_key :id 
     t.integer :region_id 
     t.string :name 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :hpus 
    end 
end