いーほろよいの技術ブログ

IT技術ブログになります。

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=自分だという方は是非教えてください。

 

以上、最後まで読んでいただきありがとうございます。