日々の記録。

プログラミングのメモや感じた事などを記録。

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の列がかぶった場合
  • 作成日、更新日の対応
  • 論理削除対応