March 14, 2015

Oszlop hozzáadása táblához vagy oszlop törlése táblából Rails-ben

Gyakran járok úgy, hogy utólag hozzá kell adni egy Rails alkalmazás adatbázisának valamelyik táblájához még egy oszlopot - vagy módosítani, törölni kell egy már meglévőt. Lássuk, mik a lehetőségek.

A Rails alkalmazás mappájába navigálva parancssorba írom ezt:

rails generate migration add_coolfields_to_tablename fieldname:string otherfield:string

Az add_ utáni szó (fenti példában _coolfields_)a migration-t nevezi el tapasztalatom szerint, túl sok jelentősége nincs . A _to_ utána szó (fenti példában _tablename_) viszont fontos, ez a tábla neve, ahová injektálni szeretnénk.

Itt egy konkrétabb példa:

rails generate migration add_contact_details_to_customers work_email:string private_email:string

CamelCase-t is használhatunk:

rails generate migration AddContactDetailsToCustomers work_email:string private_email:string

Ennek hatására a projekt db/migrate mappájában születik egy új fájl [dátumidő]_addfieldname_to_tablename.rb néven. Azt, hogy eddig milyen nevű és típusú oszlopok vannak a táblában, azt a db/schema.rb fájlból szoktam kihalászni. Ott látszik, hogy a táblák neve többesszámban van, így emlékeztet arra, hogy a migráció létrehozásakor is azt használjak.

Az oszlop törlése hasonlóképp működik, ott ez a varázsige:

rails generate migration RemovePhoneFromCustomers phone:string

Hogy az elvégzett módosítás életbe lépjen, szükséges egy migrációt futtatni az adatbázison, erre jó a következő parancs:

rake db:migrate

Vagy ha mondjuk csak a TEST környezethez belőtt adatbázison szeretnénk először:

rake db:migrate RAILS_ENV=test

Bővebb infó: http://edgeguides.rubyonrails.org/active_record_migrations.html

Nandor Biro

Software Engineer working at Whereby, lover of all things countryside, life-long learner with a passion for IT and woodworking. Find him on Twitter.