FogBugz #62: move address to a separate model/table.
This commit is contained in:
parent
8c89652fbb
commit
df0821b2b8
6 changed files with 152 additions and 68 deletions
3
app/models/address.rb
Normal file
3
app/models/address.rb
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
class Address < ActiveRecord::Base
|
||||||
|
has_many :contacts
|
||||||
|
end
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
class Contact < ActiveRecord::Base
|
class Contact < ActiveRecord::Base
|
||||||
has_many :emails, :dependent => :destroy
|
has_many :emails, :dependent => :destroy
|
||||||
has_many :phones, :dependent => :destroy
|
has_many :phones, :dependent => :destroy
|
||||||
|
has_one :address
|
||||||
|
|
||||||
accepts_nested_attributes_for :emails, :reject_if => lambda { |a| a[:address].blank? }, :allow_destroy => true
|
accepts_nested_attributes_for :emails, :reject_if => lambda { |a| a[:address].blank? }, :allow_destroy => true
|
||||||
accepts_nested_attributes_for :phones, :reject_if => lambda { |a| a[:nr].blank? }, :allow_destroy => true
|
accepts_nested_attributes_for :phones, :reject_if => lambda { |a| a[:nr].blank? }, :allow_destroy => true
|
||||||
|
|
|
||||||
49
db/migrate/20110713200056_create_addresses.rb
Normal file
49
db/migrate/20110713200056_create_addresses.rb
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
class CreateAddresses < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :addresses do |t|
|
||||||
|
t.string :street
|
||||||
|
t.string :housenr
|
||||||
|
t.string :zipcode
|
||||||
|
t.string :place
|
||||||
|
t.string :country
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
|
||||||
|
# There is no such thing as relevant production data, yet.
|
||||||
|
# Thus, no need to care about migrating existing data.
|
||||||
|
remove_column :contacts, :street
|
||||||
|
remove_column :contacts, :housenr
|
||||||
|
remove_column :contacts, :plz
|
||||||
|
remove_column :contacts, :place
|
||||||
|
remove_column :contacts, :country
|
||||||
|
|
||||||
|
# Add FK reference
|
||||||
|
change_table :contacts do |t|
|
||||||
|
t.references :address
|
||||||
|
end
|
||||||
|
# Add the foreign key
|
||||||
|
execute <<-SQL
|
||||||
|
ALTER TABLE contacts
|
||||||
|
ADD CONSTRAINT fk_contacts_addresses
|
||||||
|
FOREIGN KEY (address_id)
|
||||||
|
REFERENCES addresses(id)
|
||||||
|
SQL
|
||||||
|
|
||||||
|
# Force ActiveRecord to flush the cache and re-read the column information.
|
||||||
|
Contact.reset_column_information
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
execute "ALTER TABLE contacts DROP FOREIGN KEY fk_contacts_addresses"
|
||||||
|
remove_column :contacts, :address_id
|
||||||
|
|
||||||
|
add_column :contacts, :country, :string
|
||||||
|
add_column :contacts, :place, :string
|
||||||
|
add_column :contacts, :plz, :string
|
||||||
|
add_column :contacts, :housenr, :string
|
||||||
|
add_column :contacts, :street, :string
|
||||||
|
|
||||||
|
drop_table :addresses
|
||||||
|
end
|
||||||
|
end
|
||||||
144
db/schema.rb
144
db/schema.rb
|
|
@ -1,68 +1,76 @@
|
||||||
# This file is auto-generated from the current state of the database. Instead
|
# This file is auto-generated from the current state of the database. Instead
|
||||||
# of editing this file, please use the migrations feature of Active Record to
|
# of editing this file, please use the migrations feature of Active Record to
|
||||||
# incrementally modify your database, and then regenerate this schema definition.
|
# incrementally modify your database, and then regenerate this schema definition.
|
||||||
#
|
#
|
||||||
# Note that this schema.rb definition is the authoritative source for your
|
# Note that this schema.rb definition is the authoritative source for your
|
||||||
# database schema. If you need to create the application database on another
|
# database schema. If you need to create the application database on another
|
||||||
# system, you should be using db:schema:load, not running all the migrations
|
# system, you should be using db:schema:load, not running all the migrations
|
||||||
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
||||||
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20110607192020) do
|
ActiveRecord::Schema.define(:version => 20110713200056) do
|
||||||
|
|
||||||
create_table "contacts", :force => true do |t|
|
create_table "addresses", :force => true do |t|
|
||||||
t.string "firstname"
|
t.string "street"
|
||||||
t.string "lastname"
|
t.string "housenr"
|
||||||
t.string "street"
|
t.string "zipcode"
|
||||||
t.string "housenr"
|
t.string "place"
|
||||||
t.string "plz"
|
t.string "country"
|
||||||
t.string "place"
|
t.datetime "created_at"
|
||||||
t.string "country"
|
t.datetime "updated_at"
|
||||||
t.datetime "created_at"
|
end
|
||||||
t.datetime "updated_at"
|
|
||||||
t.integer "birth_day"
|
create_table "contacts", :force => true do |t|
|
||||||
t.integer "birth_month"
|
t.string "firstname"
|
||||||
t.integer "birth_year"
|
t.string "lastname"
|
||||||
t.integer "user_id"
|
t.datetime "created_at"
|
||||||
end
|
t.datetime "updated_at"
|
||||||
|
t.integer "birth_day"
|
||||||
create_table "emails", :force => true do |t|
|
t.integer "birth_month"
|
||||||
t.string "desc"
|
t.integer "birth_year"
|
||||||
t.string "address"
|
t.integer "user_id"
|
||||||
t.datetime "created_at"
|
t.integer "address_id"
|
||||||
t.datetime "updated_at"
|
end
|
||||||
t.integer "contact_id"
|
|
||||||
end
|
add_index "contacts", ["address_id"], :name => "fk_contacts_addresses"
|
||||||
|
|
||||||
add_index "emails", ["contact_id"], :name => "fk_emails_contacts"
|
create_table "emails", :force => true do |t|
|
||||||
|
t.string "desc"
|
||||||
create_table "phones", :force => true do |t|
|
t.string "address"
|
||||||
t.string "desc"
|
t.datetime "created_at"
|
||||||
t.string "nr"
|
t.datetime "updated_at"
|
||||||
t.datetime "created_at"
|
t.integer "contact_id"
|
||||||
t.datetime "updated_at"
|
end
|
||||||
t.integer "contact_id"
|
|
||||||
end
|
add_index "emails", ["contact_id"], :name => "fk_emails_contacts"
|
||||||
|
|
||||||
add_index "phones", ["contact_id"], :name => "fk_phones_contacts"
|
create_table "phones", :force => true do |t|
|
||||||
|
t.string "desc"
|
||||||
create_table "users", :force => true do |t|
|
t.string "nr"
|
||||||
t.string "email", :default => "", :null => false
|
t.datetime "created_at"
|
||||||
t.string "encrypted_password", :limit => 128, :default => "", :null => false
|
t.datetime "updated_at"
|
||||||
t.string "reset_password_token"
|
t.integer "contact_id"
|
||||||
t.datetime "remember_created_at"
|
end
|
||||||
t.integer "sign_in_count", :default => 0
|
|
||||||
t.datetime "current_sign_in_at"
|
add_index "phones", ["contact_id"], :name => "fk_phones_contacts"
|
||||||
t.datetime "last_sign_in_at"
|
|
||||||
t.string "current_sign_in_ip"
|
create_table "users", :force => true do |t|
|
||||||
t.string "last_sign_in_ip"
|
t.string "email", :default => "", :null => false
|
||||||
t.datetime "created_at"
|
t.string "encrypted_password", :limit => 128, :default => "", :null => false
|
||||||
t.datetime "updated_at"
|
t.string "reset_password_token"
|
||||||
end
|
t.datetime "remember_created_at"
|
||||||
|
t.integer "sign_in_count", :default => 0
|
||||||
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
|
t.datetime "current_sign_in_at"
|
||||||
add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
|
t.datetime "last_sign_in_at"
|
||||||
|
t.string "current_sign_in_ip"
|
||||||
end
|
t.string "last_sign_in_ip"
|
||||||
|
t.datetime "created_at"
|
||||||
|
t.datetime "updated_at"
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
|
||||||
|
add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
|
||||||
|
|
||||||
|
end
|
||||||
|
|
|
||||||
15
test/fixtures/addresses.yml
vendored
Normal file
15
test/fixtures/addresses.yml
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
||||||
|
|
||||||
|
one:
|
||||||
|
street: MyString
|
||||||
|
housenr: MyString
|
||||||
|
zipcode: MyString
|
||||||
|
place: MyString
|
||||||
|
country: MyString
|
||||||
|
|
||||||
|
two:
|
||||||
|
street: MyString
|
||||||
|
housenr: MyString
|
||||||
|
zipcode: MyString
|
||||||
|
place: MyString
|
||||||
|
country: MyString
|
||||||
8
test/unit/address_test.rb
Normal file
8
test/unit/address_test.rb
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class AddressTest < ActiveSupport::TestCase
|
||||||
|
# Replace this with your real tests.
|
||||||
|
test "the truth" do
|
||||||
|
assert true
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue