Ruby on Railsは複合キーをサポートしないため、Composite Primary Keys
にあるように以下のコマンドをDOSコマンドプロンプトから実行して、拡張モジュールをインストールします。
>gem install composite_primary_keys
インストールができたら、Railsプロジェクトの
/config/environment.rbの末尾に以下の文を追加します。
require 'composite_primary_keys'
次に以下のDBテーブルを作成しましょう。
CREATE TABLE bookmark (
bookmark_id INTEGER(11) NOT NULL,
branch_no INTEGER(10) UNSIGNED NOT NULL,
url VARCHAR(255) NOT NULL,
PRIMARY KEY(bookmark_id, branch_no)
);
そして、EclipseのRadRailsのジェネレータタブからscaffoldを以下のように実行しましょう。
(ActiveRecord::Base.pluralize_table_names = falseの設定が前提です。)
scaffold Bookmark Bookmark
できあがった/models/bookmark.rbを以下のように改造します。
(変更前)
class Bookmark < ActiveRecord::Base
end
↓
(変更後)
class Bookmark < ActiveRecord::Base
set_primary_keys :bookmark_id, :branch_no
#"branch_no"は"1"固定にしています。とりあえずね。
def before_create
self.id = [ self.bookmark_id_next, 1 ]
end
def bookmark_id_next
return ActiveRecord::Base.connection.select_value('select ifnull(max(bookmark_id),0)+1 from bookmark')
end
end
いつものようにWEBrickで確認しましょう(http://localhost:3000/bookmark)←実際は全部半角小文字
ただし、登録フォームに"branch_no"がありますが、/models/bookmark.rbで"1"固定にしているので、画面からの入力値は無視されます。