クッキーとかセッションとかよく聞くけどいまいちわかってなかった
状態管理してみる
サービスをWeb上にアップしたのはいいものの、誰が作ったかぐらいはわかるようにしたい。
けど、ユーザ管理とか面倒なのでやりたくない。
ふーむ、どうしたものか、と考えて基礎の本を読んでたら、
「状態管理」という項目がありました。
クッキーとかセッションとかのやつ。
そうだ!これを入れてみよう!!
というわけで頑張ってみよう。
qiita.com
とりあえずはこれを参照。
モデルを作成、セッションにuser ID挿入
IDを入れるためのuserテーブルを作成する。
$ rails generate model user name:string lastlogin:date invoke active_record create db/migrate/20151020073924_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml $ rake db:migrate == 20151020073924 CreateUsers: migrating ====================================== -- create_table(:users) -> 0.0020s == 20151020073924 CreateUsers: migrated (0.0021s) =============================
で、
[ application_controller.rb ]
before_action :login def login # new session if session[:user_id].blank? user = User.create session[:user_id] = user.id end @user_id = session[:user_id] end
とりあえずこれで、新規セッションの場合には
「user IDを発行 → セッションに挿入」
というフローができました。
次はこれを他テーブルの要素にも入れる必要があるんだよなぁ。
既存テーブルにカラムを追加する
ruby on railsのデータベースのテーブルにカラムを追加、削除する
基本的には「Addカラム名Toテーブル名」でいけるもよう。
$ rails generate migration AddUser_idToAnime_titles user_id:string invoke active_record create db/migrate/20151020084600_add_user_id_to_anime_titles.rb b-kt-01:musico kt$ rake db:migrate == 20151020084600 AddUserIdToAnimeTitles: migrating =========================== -- add_column(:anime_titles, :user_id, :string) -> 0.0009s == 20151020084600 AddUserIdToAnimeTitles: migrated (0.0010s) ==================
ってやったら、カラムの順番が一番最後になってしまって、ちょっとイケてない。。。
削除してやり直そう。
と思ったらマイグレーションファイルに追記すればいいだけだった。しにたい。
もういちどやりなおし
モデルを削除してマイグレーション
$ rails generate migration RemoveUser_idFromAnime_titles user_id:string invoke active_record create db/migrate/20151020085338_remove_user_id_from_anime_titles.rb $ rake db:migrate
モデル削除用のマイグレーションファイルがあるとモデル作れないのでデリる
$ rails destroy migration RemoveUser_idFromAnime_titles invoke active_record remove db/migrate/20151020091023_remove_user_id_from_anime_titles.rb
カラム追加のマイグレーションファイルを強制上書き
(identicalってなるので2回やった)
$ rails generate migration AddUser_idToAnime_titles user_id:string --force invoke active_record remove db/migrate/20151020090845_add_user_id_to_anime_titles.rb create db/migrate/20151020091329_add_user_id_to_anime_titles.rb
"after: "をつけてもっかいやってみる
$ rake db:migrate == 20151020091329 AddUserIdToAnimeTitles: migrating =========================== -- add_column(:anime_titles, :user_id, :string, {:after=>:icon}) -> 0.0023s == 20151020091329 AddUserIdToAnimeTitles: migrated (0.0024s) ==================
ってできてねえ!!なんでやねん!!
マイグレーションをロールバック
とりあえずマイグレーションをロールバックできるコマンドがあったのでいそいそと戻す。
$ rake db:version Current version: 20151020091329 $ rake db:rollback == 20151020091329 AddUserIdToAnimeTitles: reverting =========================== -- remove_column(:anime_titles, :user_id, :string, {:after=>:icon}) -> 0.0134s == 20151020091329 AddUserIdToAnimeTitles: reverted (0.0236s) ================== $ rake db:version Current version: 20151020091023
なんかマイグレーションファイル消したり強制上書きしたのでバージョンがおかしい。
よくわからないのでもう初期化しよう。
初期化してafterつけたのマイグレートしたのにできてないんだが?
なぜだ。なぜできないのだぉぉぉぉ
あきらめますた。