Railsのモデル作成時にカラム指定をしてみた!
はじめに
お問い合わせフォームの時には特に考えてやっていなかったのですが、テーブル構築時に普通ならnot nullやデフォルト値の設定などすると思います。
今回はそんな設定をしてテーブル作成をしてみました。
手順
以前にもやったと思いますが、今後は"scaffold"を使用して一通り作成します。
scaffoldとmodelの違いがイマイチ分かりません...
>bundler exec rails g scaffold mogu code:string name:string zip:integer address:string telephone:integer
作成されたマイグレーションファイルを編集
お馴染みのマイグレーションファイルが生成されると思います。
先ほどのコマンドで"db/migrate/yyyymmddxxxxxx_create_mogus.rb"というファイルができます。
今回は下記の仕様でテーブルを作成したいと思います。
- idカラムは使わない
- idの代わりにcodeカラムをプライマリキー指定
- codeの文字列は32文字がMax
- zipカラムは20文字まで
- addressカラムはデフォルト"Tokyo"
- code, name, addressはnull不可
書き出すとこんな感じです。
class CreateMogus < ActiveRecord::Migration
def change
create_table(:mogus, :id=>false, :primary_key=>"code") do |t|
t.string :code, null: false, limit:32
t.string :name, null: false
t.integer :zip, limit: 7
t.string :address, null: false, default: 'Tokyo'
t.integer :telephone
t.timestamps null: false
end
end
end
テーブル作成
>bundler exec rake db:migrate RAILS_ENV=development_root
※RAILS_ENV=development_rootは個人的に設定している値です。
確認
+------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+-------+ | code | varchar(32) | NO | | NULL | | | name | varchar(255) | NO | | NULL | | | zip | bigint(20) | YES | | NULL | | | address | varchar(255) | NO | | Tokyo | | | telephone | int(11) | YES | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +------------+--------------+------+-----+---------+-------+
個人的感想ですが、毎回テーブル作成する度にidカラムがデフォルトで用意されるのは気持ち悪いです。(古い人の考えだからかも知れませんが...)
この辺って文化的にどうなんでしょうか。
もし、優しくてRails=自分だという方は是非教えてください。
以上、最後まで読んでいただきありがとうございます。