アレを作るためにやらなきゃいけないこと
ブログをメモ超兄貴にするのはどうかと思うけど
知るか
ここはおれのブログだ
まず
・投票先db(名前未定。Candidateとかどうだろう?)を作り、お題db(Election)と連携させる。
あッ そうだ
データベースの構造を少し変えることにしました。
今まではElectionデータベースに100の空箱(candidate0からcandidate99、votes0に……)を用意してそこに投票先と得票数を収めるシステムにしてましたが
モォ~~~~っといいやつ、思いついちゃいました☆
データベースの横の広がり(レコード、あるいはロウ?)には限度があるし
手動で作らなアーカンソー州だからキングカズを荒唐無稽に増やしていくのはnotよろしおす
やけん、データベースの縦の広がり(カラム?)はほぼ無限(初心者のたわごとにつき、真に受けるスカルズ)だし自動で作ってくれるので
candidate0,1,2,3~~~~~……って風に空箱を手動で作るより~~
Candidateデータベースを作り候補者名(candidatename)、得票数(votes)、投票のお題(electionname)カラムを作り
投票のお題カラム(@candidate.electionname)を目印にElectionデータベースと連携させる
そんな風に作った方がスマートなんじゃねーのぉ??ってなって
データベースの構造を少し変えました
データベース間の連携の練習にもなるしね!
※追記: Candidateカラムにnominator(推薦人)カラムを追加したよ~~
composer(提案者)以外のユーザーもcandidate(候補者)を後から追加できるようにだよ~~
……ハァ、でもやらなきゃいけないことはまだあって
・重複投稿を禁止するシステム(履歴データベースみたいなのを作るとか?)
・アカウント名簿とログインフォーム(シロウトなのにセキュリティを作るってこわ~い)
今思いつくものだけでもこんなにある?
いやんなっちゃうね~~~~
まぁ今日も元気に
※この記事がプロジェクトの進行とともに随時更新していく予定だよ~~~
ここから先は追記分
※2020.02/29
重複投票を防ぐためにHIstory(履歴)モデルを追加するよ~~~
※そのうち追加したい機能
2020.02/29
ユーザーフォロー
タグ検索
リコマンド
掲示板(Bulltin election_id :integer description: string ordinal: integer)
外部SNSとのログイン連携
※追加するカラム
2020.02/29
Election.anonymous
投票ページにて発案者名が匿名化されるBoolean型
Election.is_corporation
Boolean型。trueなら公式認定マークを渡す。
Election.permit_foreigner
Boolean型。trueならアカウントを持たないユーザーの投票を許可する。
Election.borda
integer型。borda>1なら投票形式がボルダ得点に。第N候補まで許容するかはborda=nで指定する。得票数= borda-rank+1
ボルダ得点(Borda Count):投票者は候補者を好ましさで順位付けし、高い順位を与えられた候補者は多い票数を得、低いものは少なきを得る。
Election.is_protected :boolean
課金すると自動削除から守れる
Bulltin.anonymous
省略
データベース構造の整理(未実装は@をつける)
1@User
アカウントの管理
account_name :string email :string password :string is_premium :integer
1-1Election
投票会場
@user_id :integer title :string about :string @is_corporation :boolean
@is_anonymous :bollean @borda :integer @permit_foreign :boolean
1-2P_Election
削除対象から除外される特別な投票会場。
@user_id :integer title :string about :string @is_corporation :boolean
@is_anonymous :bollean @borda :integer @permit_foreign :boolean
@1-1-1Bulletin
掲示板
election_id :integer p_election_id :integer user_id :integer description: string is_anonymous :boolean
@1-1-2History
履歴。多重投票を防ぐために活用する予定
user_id :integer election_id :integer p_election_id :integer
@1-1-3Patorol
自動削除機能を管理する。
election_id :integer history_id :integer
@1-1-4Candidate
候補者と得票数を管理する
user_id :integer election_id :integer p_election_id :integer candidate_name :string votes :integer
Electionにカラム大杉ィ!大丈夫かなコレ?
というかrailsって入れ子構造のデータベースに対応してるの~~?ふあ~~~ん