ドグサレ初心者のへっぽこビッグウェーブ

地球の底辺にいるゴミがプログラミングとか音楽とかを語るクソブログ

クッキーとかセッションとかよく聞くけどいまいちわかってなかった

状態管理してみる

サービスを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) ==================

ってやったら、カラムの順番が一番最後になってしまって、ちょっとイケてない。。。
削除してやり直そう。


stackoverflow.com

と思ったらマイグレーションファイルに追記すればいいだけだった。しにたい。

もういちどやりなおし

モデルを削除してマイグレーション

$ 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) ==================

ってできてねえ!!なんでやねん!!

マイグレーションロールバック

www.rubylife.jp

とりあえずマイグレーションロールバックできるコマンドがあったのでいそいそと戻す。

$ 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つけたのマイグレートしたのにできてないんだが?


なぜだ。なぜできないのだぉぉぉぉ


あきらめますた。