rails 既存DBを使ってrailsしてみた。
環境
- osx10.9.1
- ruby2.0.0
- rails4
- MySQL5.6.x
経緯
既にMySQL上に存在するtableを使ってrailsしてみた。
MySQLと接続する
下のサイトを参考にして、database.yamlを定義。
- development: adapter: mysql2 encoding: utf8 database: my_db_name username: root password: root host: localhost pool: 5 timeout: 5000
参考サイト http://threetreeslight.com/post/61834000065/rails-db
MySQL上のテーブルからscheme.rbを生成する。
rake environment -v -t RAILS_ENV=development db:schema:dump
参考サイト http://threetreeslight.com/post/61834000065/rails-db
scheme.rbを参考にしてgenerate scaffoldしたりgenerate model する
rails console上でテーブルの属性名と型の一覧を取得する。
(※できればrails consoleでrbファイルを直接実行したい。。。)
rails console
table_name = 'master_company' #ここにDBのテーブル名 field_names = Array.new cols = ActiveRecord::Base.connection.columns(table_name) #*1 cols.each do |c| field_names << "#{c.name}:#{c.type}" end puts field_names.join(' ') # この出力結果をコピペしておく。
rails g scaffold Company コピペした内容をペースト --skip-migration # *2
参考サイト http://kagen88.blogspot.jp/2012/12/rails.html
参考元サイトからの変更点
- columnsメソッドの引数を2つから1つに変更
- --skip-migrate を --skip-migrationに変更
modelのテーブル名を変更する。
class Company < ActiveRecord::Base self.table_name='master_company' end
参考サイト http://threetreeslight.com/post/61834000065/rails-db http://kagen88.blogspot.jp/2012/12/rails.html
modelの主キーを変更する。
class Company < ActiveRecord::Base self.table_name='master_company' self.primary_key=:company_id end
参考サイト http://threetreeslight.com/post/61834000065/rails-db http://kagen88.blogspot.jp/2012/12/rails.html
modelに複合キーを設定する。
composite_primary_keysライブラリを利用する。
class CompanyEmploy < ActiveRecord::Base self.primary_keys=:company_id, :employ_id end
参考サイト http://www.oiax.jp/rails/zakkan/composite_primary_keys_1.html
残項目
- railsの予約列と既存DBの列がかぶった場合
- 作成日、更新日の対応
- 論理削除対応