Podpięcie RoR do instniejącej bazy

Hej,

Szybkie pytanie:
Muszę dopisać kawałek soft, który będzie operował na istniejącej już bazie danych. Po prostu Railsy dorzucą tam kilka tabel. Czy tworząc nową aplikację nie wyczyści mi tej bazy?

A nie możesz zaimportować starej bazy do nowej?

Nie, na starej cały czas operuje kilka różnych systemów - interface www w php i duża liczba demonów. Chcę tylko wiedzieć czy zje mi bazę czy nie :smile:
Chyba zaraz założe jakąś, nawrzucam i przetestuje :wink:

Ja też musiałem się podczepiać do istniejącej bazy (firebird, kolumny “po polsku”, PK po kolumnach innych niż ID !) i robiłem to tak:

dodawałem np w /models/company.rb wpis:

class Company < ActiveRecord::Base
  self.table_name = 'firma'
...
end

nie miałem żadnych wpisów w db/migrate, a mimo wszystko(!) wykonywałem

rake db:migrate

Railsy za to wdzięcznie i fantastycznie wczytywały strukturę z bazy do schema.rb np taką strukturę:

  create_table "firma", primary_key: "id_firma", force: :cascade do |t|
    t.string   "id_site",        limit: 10
    t.string   "skrot",          limit: 10,              null: false
    t.string   "nazwa",          limit: 100,             null: false
    t.string   "miejscowosc",    limit: 50,              null: false
    t.string   "ulica",          limit: 50
    t.string   "nr_domu",        limit: 10,              null: false
    t.string   "nr_lokalu",      limit: 10
    t.string   "kod_pocztowy",   limit: 6
    t.string   "adres",          limit: 160
    t.string   "telefon_fax",    limit: 50
    t.string   "e_mail",         limit: 50
    t.string   "nip",            limit: 13
    t.string   "regon",          limit: 9
    t.string   "pesel",          limit: 11
    t.integer  "gr_nieformalna", limit: 2,   default: 0, null: false
    t.string   "uwagi",          limit: 255
    t.integer  "change_user",    limit: 4,               null: false
    t.datetime "change_date",                            null: false
  end
  add_index "firma", ["change_user"], name: "fk_firma_1"
  add_index "firma", ["id_firma"], name: "pk_firma", unique: true

Niczego nie wyczyściło :), a ja mogłem się posługiwać np

@company = Company.find(id_firma: id)

P.S.
…ale jakby co, to operacje na żywym organizmie robisz na własną odpowiedzialność :wink:

Przedewszystkim zrób kopię bazy danych do testów.

Następnie:

class Model < ActiveRecord::Base
  self.table_name = 'nazwa_tabelki'
  self.primary_key = 'klucz_glowny_ale_tylko_jesli_autoincrement' # jak nie to _nil_

  
end

Generalnie warto by było zablokować pewne destruktywne rake taski - jak to zrobić możesz poczytać tutaj: https://coderwall.com/p/jt4e1q/disable-destructive-rake-tasks-by-environment

Dobra, na wszelki wypadek, zrobię oddzielną bazę. W zasadzie w obecnym systemie mogę sobie skakać po bazach.