• Sorceryとは?

    └Railsに認証機能の実装を行うためのライブラリで、「認証機能」とはユーザの情報を検証して、システムへのログインやユーザの有効性確認を行うための機能です。

  • バリデーションとは?

    └オブジェクトがDBに保存される前に、そのデータが正しいかどうかを検証する仕組みのことです。事前に「○○のデータは数字のみ」「××は必須である」などのバリデーションを各モデル別に定義しておくことで、データの保存時にそれらの確認がなされ、適合しない場合には保存が出来ないような仕組みとなります。

    参考文献:https://qiita.com/h1kita/items/772b81a1cc066e67930e

    https://pikawaka.com/rails/validation

  • form_withとは?

    └フォーム作成を支援するツールのこと

    下記のようなフォームを簡単に作ることができる

    Untitled

    Untitled

    1. modelオプション:
      • 渡されたオブジェクトが新規で作成されたものか、既存のものなのかを判定して、新規のオブジェクトならばcreateアクションへ、既存ならばupdateアクションへのパスを生成します。
      • そのモデルと同名のコントローラーのアクションへと遷移するように自動でパスを生成します。
    2. urlオプション:
      • 渡されたurlに対応するコントローラーのアクションへと遷移するようにパスを生成します。
    3. localオプション:
      • form_withはリモート送信にも対応していてlocalオプションで切り替えられます。デフォルトがリモート送信なのかどうかはバージョンによって変わりますが5系ではデフォルトでリモート送信機能がonになっています。

    ログインのフォームに関してはモデルと紐づかない(ユーザーと紐づくと思われがちですが、あくまでも『ログイン/セッション』というリソースに紐づくという考え方)ので form_with model: @userのようにする必要はありません。フォームの送信先は/loginになって欲しいのでurl: login_pathの指定をします。

    参考文献:https://school.runteq.jp/pages/37?page_category=document

    ⭐️sorceryで最も使うメソッド⭐️

    • **loginメソッド:**ログインするためのメソッドです。引数にはemailとpasswordを取ります。この部分ですね。
    [user_sessions_controller]
    
    def create
    @user = login(params[:email], params[:password])
    
    login(params[:引数1],[:引数2])
    
    
    • logoutメソッド:ログアウトするためのメソッドです。引数は取らない。
    def destroy
    	logout
    	  redirect_to root_path
    end
    
    • before_action :require_loginメソッド:その名前の通りログインを強制します。ログインが必須の画面・コントローラにおいてbefore_action :require_loginを書きます。

    before_action :require_login==特定のアクションを動かす前にログインをさせる

    • not_authenticatedメソッド:ログインしていなかった場合に特定の処理をするメソッド

    『ログインしていなかったらフラッシュメッセージを表示する』&『ログインしていなかったらこのページにリダイレクトをする』のような処理を書くことが一般的です

    # app/controllers/application_controller.rb(全コントローラ対象)
    
    before_action :require_login
    (全コントローラ対象ファイルで記入することによって、今後全てのファイルにログインが必要か否かを記述するようになる)
    
    private
    def not_authenticated
      redirect_to login_path, alert: "Please login first"
    end
    ((#ログインしたなかったら、ログイン画面へパス)、(フラッシャメッセージも焚く。))
    
    • skip_before_action :require_loginメソッド:特定の画面・コントローラにおいてはログインしなくてもページにパスできるようにするメソッド

    ※applicationコントローラでbefore_action :require_loginしたら、skipしたいコントローラ内には必ず入れないと、そのページに飛ばない!!

    # app/controllers/user_sessions_controller.rb
    classUserSessionsController <ApplicationController
      skip_before_action :require_login
    
    defnew
    end
    
    ~~~~~~
    以下省略
    
    • before_actionの「onlyオプション」とは?

      特定のアクションのときだけbefore_actionを使いたい場合はonlyを使います。

      class PostsController < ApplicationController
      before_action :set_post, only: %i[show edit update destroy]
      
      
    • before_actionの%記法とは?

      1. コードをシンプルに記述することができる記法です。
      2. %iはシンボルの配列を作り出すことができます。
      3. %wとすると文字列の配列を作り出すことができます。

      記述するコードが減るので、可読性が上がったりタイプミスによるエラーが出る確率を減らすことができます。

      # シンボル型で定義
      before_action :set_message, only: %i[show edit]
      
      # 文字列で定義
      before_action :set_message, only: %w[show edit]
      

    参考文献:https://pikawaka.com/rails/before_action

    • set_~~メソッドとは?

      コントローラ内のアクションで重複しているものを一つにまとめるためのメソッド

    class MessagesController < ApplicationController
    
      def index
        @messages = Message.all
      end
    
      def show
        @message = Message.find(params[:id])
      end
    (※まとめた後)
    	def show
    	end
    
      def new
        @message = Message.new
      end
    
      def create
        Message.create(message_params)
      end
    
      def edit
        @message = Message.find(params[:id])
      end
    (※まとめた後)
    	def edit
    	end
    
      def update
        message = Message.find(params[:id])
        message.update(message_parmas)
      end
    
      def destroy
        message = Message.find(params[:id])
        message.destroy
      end
    
    end
    
    private
    
      def set_message
        @message = Message.find(params[:id])
      end
    
    ・showアクションとeditアクションが同じコードで重複している。
    ・set_messageメソッドで二つのアクションをまとめる。
    ・set_メソッドでまとめたら二つのアクションを書き換える。
    
    

    参考文献:https://pikawaka.com/rails/before_action

    • ストロングパラメータとは?

      ストロングパラメーターとは指定したキーを持つパラメーターのみを受け取るようにする

      特定のキーしか受け取れないような仕組みを構築することができる。

      また、ストロングパラメータを使う際は、必ずprivateメソッド内で使用する。

      なぜ使う必要があるのか?

      投稿フォームに入力された情報はparamsによって取得されるが、その際、不正に投稿された内容がparamsに含まれているとその情報まで保存されてしまう。

      それを防ぐためにストロングパラメータというものを設定しておく。ストロングパラメータを設定しておくと指定したカラムの情報だけを受け取ることができる。

      ストロングパラメータの公式:

      def プライベートメソッド名 
      	params.require(:モデル名).permit(:カラム名)
      end
      〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
      
      def create
          @post = current_user.posts.new(post_params)
          if @post.save
            flash[:success] = 'Post was successfully created.'
            redirect_to @post
          else
            render :new
          end
        end
      
      def post_params
          params.require(:post).permit(:title, :content)
      end
      
      ↓
      post_paramsに入ったデータが同じクラス内のアクションの引数として代入される