概要
scaffoldを使ってテーブル作成をする場合、何も指定しないと、
Id
が、プライマリーキー(&オートインクリメント)として設定されます。
これだと、IDを自分で指定したい場合やオートインクリメントさせたくないマスタデータ作成には不便なので、カスタマイズする。
環境
Ruby 2.2.2
Rails 4.2.3
サンプル
例えば、都道府県マスタを作る場合
ID(プライマリーキー、オートインクリメントさせない)、日本語名、ローマ字名
のカラムを持つテーブルを作りたいとき
1.generate scaffold を実行
通常通り、scaffoldコマンドの実行
cmd
rails generate scaffold prefecture name_jp:string name_en:string
2.マイグレーションファイルの修正
プロジェクトDir/db/migrate/のマイグレーションファイルを以下のようにする
XXX_create_prefecture.rb
class CreatePrefectures < ActiveRecord::Migration
def change
create_table :prefectures, id:false do |t|
t.column :id, 'INTEGER PRIMARY KEY NOT NULL'
t.string :name_jp
t.string :name_en
t.timestamps null: false
end
end
end
*id:falseとすることで、自動的に作られるプライマリキー作成をfalseにする
3.コントローラのprefecture_paramsメソッドを修正
プロジェクトDir/app/controllers/prefectures_controller.rbの下部のprefecture_paramsメソッドにidを追加
prefectures_controller.rb
def prefecture_params
params.require(:prefecture).permit(:id, :name_jp, :name_en)
end
4.その他の修正
IDを入力、編集、表示できるように各種viewファイルを修正