190528 ブラウザは基本、DELETEリクエストを送らない。

作りたいもの

190509 アプリの完成イメージ - エンジニアになりたい日記

190517 日記アプリの要件を再考 - エンジニアになりたい日記


本日やったこと

  • 昨日のエラー解決
  • Diaryモデルの作成


問題

昨日のエラー解決の続き。

DELTEリクエストを送ってsessionを消し、ユーザをログアウトさせたい。

http://localhost:3000/logout

でも、以下のエラーが出る。

Routing Error
No route matches [GET] "/logout"
Rails.root: /Users/bupolang/projects/cocologue


考えたこと

そもそもユーザのログイン/ログアウト機能を実装するために、ログアウトの動作確認をしたい。bootstrapのドロップダウンメニューの中にLogoutボタンがあり、そのボタンからログアウトの動作確認をしようとした。しかし、dropdownが降りてこない。そこでブラウザからlogoutの動作確認をしようとしていた。


デフォルトのブラウザからはDELETEリクエストを送付できない。今回私はブラウザから /logout とリクエストを送れば自動的にDELETE(http verb), /logout(URI)になると思い込んでいた。しかし実際にはGET(http verb), /logout(URI)が送付されていた。なので、No route mathes [GET] /logoutとエラーが発生するのは当然だった。


もともとのdropdownが降りてこない不具合を治せば、ログアウトの動作確認ができる。そこで、そちらを修正することにした。

Rails5.系でbootstrapを有効にする

app/assets/javascript/application.jsを以下のように変更。1

//= require rails-ujs
//= require turbolinks
//= require jquery
//= require activestorage
//= require_tree .


結果、ログアウトできた。わーい😀

Image from Gyazo

Diaryモデル作成

cocologue $ rails g model Diary content:text woke_up_at:datetime slept_at:
datetime activity:integer mood:integer appetite:integer walking:integer us
er:references
      invoke  active_record
      create    db/migrate/20190528092030_create_diaries.rb
      create    app/models/diary.rb
      invoke    test_unit
      create      test/models/diary_test.rb
      create      test/fixtures/diaries.yml


class CreateDiaries < ActiveRecord::Migration[5.2]
  def change
    create_table :diaries do |t|
      t.text :content
      t.datetime :woke_up_at
      t.datetime :slept_at
      t.integer :activity
      t.integer :mood
      t.integer :appetite
      t.integer :walking
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end


cocologue $ rails db:migrate
== 20190528092030 CreateDiaries: migrating ===================================
=
-- create_table(:diaries)
   -> 0.0102s
== 20190528092030 CreateDiaries: migrated (0.0103s) ==========================
=


次回はモデルのバリデーションから。