LoginSignup
3
2

More than 5 years have passed since last update.

[RoR]railsのscaffoldでデフォルトプライマリーキーを使わない設定

Last updated at Posted at 2015-12-23

概要

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ファイルを修正

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2