2015/07/19

video(録画)テーブルの設計と実装

番組テーブルの実装とリスト表示、検索、ソート等の実装がおおかた落ち着いたので、次はいよいよ予約、録画、視聴のためのレコード設計に入ります。

予約・録画レコードを、Videosとするとして、それがどのような状態かを表す必要がありますね。
予約・録画・失敗とかです。
それを表現するためのマスターレコードをまずは作っておきましょう。

ステータスレコード
$ rails g model status name:string
で、ちょっと乱暴ですが、レコードID決め打ちで意味をもたせます。単純にこれだけなので、seedで入れてしまいます。
db/seeds.rb
 Status.create(name: '予約')
 Status.create(name: '録画')
 Status.create(name: 'キャンセル')
 Status.create(name: '失敗')

$ rake db:migrate
$ rake db:seed
これでステータスレコードは完成。

ビデオレコード
$ rails g scaffold video status_id:integer program_id:integer filename:string
後で全部書き換えることになると思うけれど、scaffoldで初期状態のviews/controllersを作ってもらいます。
それに、後で幾つかレコードデータも追加していくことになるでしょう。

status_idが、先ほどのStatusへのリンク用
program_idが、番組テール部へのリンク用
filenameが、録画したファイル名。ファイルパスとか何とかは後で考える。

論理削除を使うかやめるか?
Programレコードの方だが、過去レコードはどんどん削除するつもりでいるが、Videoレコードには番組情報を持たずに、program_idでリンクを貼るつもりでいる。ならば過去レコードであっても削除されては困るわけで。
じゃあ、deleted_atを付けて、「paranoia」とかで論理削除を組み込むか?組み込むなら、
Gemfileに
 gem "paranoia", "~> 2.0"
を追加(rails 4.xは、v2.xを使うらしい)して、models/programs.rbに
 acts_as_paranoid
と書けば組み込まれるので簡単ではあるが・・・

やっぱりやめて、video_idをProgramベーブルに追加する方向で。
$ rails g AddVideoIdToProgram video_id:integer:index ←面倒になってきたのでindexも一緒に。

このvideo_idがNULLじゃなければ消さないようにする。今回の場合はこの方がシンプルで分かりやすいかなと。

確認
$ rails s -b 0.0.0.0
http://shuttle:3000/videos へアクセス。
おや? そうでした、まだ、bootstrapテーマをかぶせてませんでした。
$ rails g bootstrap:themed Videos
はい。いい感じ。
これにProgramsと同じように検索とソートを加えて見た目実装は完了。

次は実際の「予約・録画」ですか。ここまでほとんど自分でコードをガリガリ書くこと無く出来てしまいましたが、さすがにここからはコードを書かないとならんですねぇ。

0 件のコメント:

コメントを投稿