Railsで簡易予約システムを考えてみます。
エンティティ
• リソース系
予約対象:item
予約対象グループ:item_group
仕様:specification
仕様カテゴリ:spec_category
予約状況:booking_status
• イベント系
予約:booking
その他、基本的なユーザ、カレンダー、料金が発生する場合は、利用料などを管理するマスタ(対照表)、承認が必要なら・・・など、考えれば考えるほど出てきてしまうのですが、簡易予約システムという(言い訳)ことで・・・とりあえずここ辺からスタート。
リソース系(マスタ)が多いので、すべてscaffoldで一旦作成します。
その前にアプリケーション名はbookingとしてみます。
プロジェクトの作成
$ rails --database=postgresql booking
データベースの作成
今回、PostgreSQLを利用しています。
database.yml のユーザ、パスワード等を指定し、
$ rake db:create
を実行します。
続いてscaffoldでひと通りジェネレート
$ ruby script/generate scaffold item name:string item_group_id:integer spec_id01:integer spec_id02:integer description:text deleted:boolean ins_user:string upd_user:string $ ruby script/generate scaffold item_group name:string spec_category_id01:integer spec_category_id02:integer description:text deleted:boolean ins_user:string upd_user:string $ ruby script/generate scaffold specification name:string spec_category_id:integer deleted:boolean ins_user:string upd_user:string $ ruby script/generate scaffold spec_category name:string description:text deleted:boolean ins_user:string upd_user:string $ ruby script/generate scaffold booking_status name:string deleted:boolean ins_user:string upd_user:string $ ruby script/generate scaffold booking user:string item_id:integer start_date:date end_date:date status:integer comment:text
デフォルトで作成されたModelにデータの関連を追加します。
主な関連は次のとおり
item [n] - [1]item_group
item_group[n] - [1]spec_category
spec_category[1] - [n]specification
item[n]-[1]specification
itemには仕様(specification)を2つまで指定でき、仕様の種類は、itemのグループによって決めたいと思います。そのため、
item[n]-[1]specification
としていても、条件で絞りこまなければならないのですが、そのへんは後で考えたいと思います。
続いて、使い勝手を少し改善しましょう。
画面にIDがそのまま出てしまうのは、人間が操作するのに厳しいので、名称が出るようにMode、View、Controllerを修正します。
Modelには、has_manyや、belongs_toを指定します。
また、itemのように1つのモデルに2つまで関連する項目を指定するときは、belongs_to にアソシエーション名をつけ、:class_name、:foreign_keyのオプションを指定します。
Viewはテキストフィールド(f.text_field)の箇所を、プルダウン(f.select)に変更します。
Model
class Item < ActiveRecord::Base belongs_to :item_group belongs_to :specification01, :class_name => 'Specification', :foreign_key => 'spec_id01' ・・・
View
<=% f.select(:item_group_id, ItemGroupsController.item_group_list) %>
Controllerに追加するクラスメソッド(self. が付きます)
def self.item_group_list ItemGroup.find(:all).map do |item_group| [item_group.name, item_group.id] end end
item の一覧画面と、登録画面は次のような感じでできました。
次は予約画面の作成を行って見ます。
0 件のコメント:
コメントを投稿