takanori-matsushita / BFF-practice

0 stars 0 forks source link

Rails tutorial 第5章(サーバー) #8

Open takanori-matsushita opened 4 years ago

takanori-matsushita commented 4 years ago

branch: backend-filling-in-layout

takanori-matsushita commented 4 years ago

リスト 5.28: StaticPagesで扱う新しい名前付きルートに対するテスト green spec/requests/static_pages_request_spec.rb

require 'rails_helper'

RSpec.describe "StaticPages", type: :request do

  before do
    @base_title = "Ruby on Rails Tutorial Sample App"
  end

  describe "GET root" do
    it "returns http success" do
      get api_v1_root_path
      expect(response).to have_http_status(:success)
      json = JSON.parse(response.body)
      expect(json['title']).to eq("#{@base_title}")
    end
  end

  describe "GET /help" do
    it "returns http success" do
      get api_v1_help_path
      expect(response).to have_http_status(:success)
      json = JSON.parse(response.body)
      expect(json['title']).to eq("Help | #{@base_title}")
    end
  end

  describe "GET /about" do
    it "returns http success" do
      get api_v1_about_path
      expect(response).to have_http_status(:success)
      json = JSON.parse(response.body)
      expect(json['title']).to eq("About | #{@base_title}")
    end
  end

  describe "GET /contact" do
    it "returns http success" do
      get api_v1_contact_path
      expect(response).to have_http_status(:success)
      json = JSON.parse(response.body)
      expect(json['title']).to eq("Contact | #{@base_title}")
    end
  end

end
takanori-matsushita commented 4 years ago

ユーザー登録・ログイン関連はdeviseを使って実装する。 Gemfile

gem devise

deviseのインストール docker-compose run web bundle install docker-compose run web rails g devise:install

deviseのインストールができたら、表示される4つの設定を説明どおりに手動でファイルを編集する必要がある。

  1. backend/config/environments/development.rb
    config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

    2, 4は一旦省略。3は今回はAPIモードのため不要

userモデルの作成 docker-compose run web rails g devise user usersコントローラの作成 docker-compose run web rails g devise:controllers api/v1/users

takanori-matsushita commented 4 years ago

ルーティングがnamespaceの中に入っていないので修正 ログイン関連のルーティングはnamespaceの外で良さそう config/routes.rb

Rails.application.routes.draw do
  devise_for :users
  namespace :api do
    namespace :v1 do
      root "static_pages#home"
      get '/help', to: 'static_pages#help'
      get '/about', to: 'static_pages#about'
      get '/contact', to: 'static_pages#contact'
    end
  end
end
takanori-matsushita commented 4 years ago

エラーが発生 undefined methoddevise_for'` railsサーバーを再起動させないといけないらしい。

ActiveRecord::PendingMigrationError マイグレーションもしないといけないらしい。

takanori-matsushita commented 4 years ago

リスト 5.43: deviseのエンドポイントをデフォルトのものから変更する。 config/routes.rb

  devise_scope :users do
    get 'singup', to: 'devise/registers#new'
  end

こうすることでprefixもsignupに変更される。でもサインアップページはNuxt側で制作するため、必要ないかもしれない。

takanori-matsushita commented 4 years ago

リスト 5.44: backend/spec/requests/users/sessions_request_spec.rb

describe "GET /signup" do
  it "returns http success" do
    get signup_path
    expect(response).to have_http_status(:success)
  end
end