rails 技術ブログ

rails 技術ブログ

勉強したことをアウトプットしていきます

js用語集

fetch

HTTP通信を可能にする。fetch APIというらしいです。 fetchを使ってサーバーにリクエストを投げ、レスポンスからデータを取得したりするときに使う。

let request = new Request('/users', {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
        'X-CSRF-Token': token
      },
      method: 'POST',
      body: body
    }

fetch(request)
  .then(response => response.json())
  .then(data => console.log(data));
append

指定した要素の最後に引数を追加してくれる。

('p').append('追加する')
// pタグのテキストの最後に`追加する`というテキストが追加される
document

HTML要素を取得できる。

console.log( document.head );
//head要素の中身を出力
querySelector

HTML要素のセレクタを指定して取得できる。javascriptは元々、getElementById()(HTMLのid要素を取得)とgetElemetnsByClassName()(HTMLのclass要素を取得)があったが、querySelectorを使うとidもclassも関係なく要素を取得することができる。

const amr_field = document.querySelector("#amr")


ポートフォリオ作成でjavascriptを使う必要があるので、わからない用語について自分なりに解釈してみました。
そのため適切ではない表現もあるかもしれません。違う箇所がありましたら教えていただけると嬉しいです。

■参考にした記事

Fetch の使用 - Web API | MDN

HTMLの要素を取得する! JavaScriptのdocumentプロパティの使い方 | 侍エンジニアブログ

【rails】コールバックを起動する条件を設定したい

コールバックとは?

ある特定の瞬間に呼び出されるメソッドのこと。
例えば、「ユーザー登録する際、createする前にこの処理を実行したい」などという時にコールバックが使われます。

コールバック一覧
オブジェクトの作成 概要
before_validation バリデーションが行われる直前で実行される
after_validation バリデーションが行われた直後に実行される
before_save バリデーションに成功し、オブジェクトがDBに保存される直前に実行される
around_save バリデーションに成功し、オブジェクトがDBに保存されている最中に実行される
before_create バリデーションに成功し、オブジェクトがDBに保存される直前に実行される
around_create バリデーションに成功し、オブジェクトがDBに保存されている最中に実行される
after_create バリデーションに成功し、オブジェクトがDBに保存された直後に実行される
after_save after_create / after_update の直後、データベースへの COMMIT の直前に実行される
after_commit/after_rollback after_save の後(データベースに COMMIT された後)に実行される
オブジェクトの更新 概要
before_validation バリデーションが行われる直前で実行される
after_validation バリデーションが行われた直後に実行される
before_save バリデーションに成功し、オブジェクトがDBに保存される直前に実行される
around_save バリデーションに成功し、オブジェクトがDBに保存されている最中に実行される
before_update DBが更新される直前に実行される
around_update DBが更新されている最中に実行される
after_update DBが更新された直後に実行される
after_save after_create / after_update の直後、データベースへの COMMIT の直前に実行される
after_commit/after_rollback after_save の後(データベースに COMMIT された後)に実行される
オブジェクトのdestroy 概要
before_destroy DBのデータがdestroyされる直前に実行される
around_destroy DBのデータがdestroyされている最中に実行される
after_destroy DBのデータがdestroyされた直後に実行される
after_commit/after_rollback after_save の後(データベースに COMMIT された後)に実行される
コールバックを起動する際、条件を付けたいときは?

:ifもしくは:unlessオプションをつけることで条件を指定することができます。

class User < ApplicationRecord
  before_save :downcase_email, if: :email_upcase?
end
#シンボルを使って実装すると上記のようになる



■参考にした記事

Active Record コールバック - Railsガイド

Railsのコールバックまとめ | TECHSCORE BLOG

www.amazon.co.jp

【rails】has_secure_password

has_secure_passwordとは

railsに標準でついている機能で、パスワードをそのままデータベースに保存するのではなく、元に戻すことのできない値にハッシュ化して保存してくれます。
使いたいモデル内にhas_secure_passwordと記述するだけで簡単に使うことができますが、

・使用するモデルのカラムにpassword_digestというカラムがある
bcryptというgem(ハッシュ関数を提供するgem)が必要


という二つの条件があります。

使い方

①bcryptをGemfileに記述し、

bcrypt

インストールする

$ bundle install


②モデルを作成する

$ rails g model user name:string email:string  password_digest:string
# ここで必ず`password_digest`カラムを作成すること

③データベースにusersテーブルを追加する

$ rails db:migrate
# 必要があれば、`rails db:migrate`の前にマイグレーションファイルにNOT NULL制約等を追加する

④userモデル内にhas_secure_passwordを記述する

class User < ApplicationRecord
  has_secure_password
end


補足

has_secure_passwordを記述すると、データベースのカラムには対応しないpasswordpassword_confirmationという2つの属性が追加されます。

password属性
→ユーザーが入力したパスワードを一時的に格納しておく場所

password_confirmation属性
→パスワード確認用にもう一度入力してもらった値を格納する場所


この二つの値が一致していないときは検証に失敗し、間違ったパスワードで登録してしまうことを防ぐことができます。


■参考にした記事

現場で使える Ruby on Rails 5速習実践ガイド | 大場寧子, 松本拓也, 櫻井達生, 小田井優, 大塚隆弘, 依光奏江, 銭神裕宜, 小芝美由紀 |本 | 通販 | Amazon

【rails】マイグレーションファイルを作成してNOT NULL制約を追加する

NOT NULL制約とは?

データベースの値にNULL(railsでいうnil)を格納したくない時、NOT NULL制約をつけておくと、NULLを保存できないようにしてくれます。


使い方

※既にデータベースが作成済みの場合のやり方です。


rails g migration <ファイル名>マイグレーションファイルを作成する。

$ rails g migration AddCommentsNotNull


db/migrate/xxxxxxxxxxxxxx_add_comments_not_nullというファイルが作成されている。こんな感じ↓

class AddCommntsNotNull < ActiveRecord::Migration[5.2]
  def change
  end
end


db/migrate/xxxxxxxxxxxxxx_add_comments_not_nullこのファイルにNOT NULL制約を追加する

class AddCommntsNotNull < ActiveRecord::Migration[5.2]
  def change
    change_column_null :board, :comment, false
    # change_column_null :テーブル名, :カラム名, false
  end
end

change_column_nullはActive Recordが提供しているメソッドの一つで、上記のようにマイグレーションファイルの中で使用することができます。


■参考にした記事

Active Record マイグレーション - Railsガイド

現場で使える Ruby on Rails 5速習実践ガイド | 大場寧子, 松本拓也, 櫻井達生, 小田井優, 大塚隆弘, 依光奏江, 銭神裕宜, 小芝美由紀 |本 | 通販 | Amazon

【メモ用】railsメモ帳

その日学んだ事などをひたすらメモします。
時間が経って見返した時にも、「自分の言葉で説明できる」、「定着している」と思ったら消します。

CoC(Convention over Configuration)
railsの4つの思想
rails db:migrateを複数回実行するとどうなる?
(development環境の時のみ)ルーティング情報を出力するWeb画面の表示方法
references
redirect_toに直接渡すことのできるflashのキーはデフォルトで何がある?

【rails】bundlerインストール後、実行できるようになるコマンド一覧

「そもそもbundlerとは?」という方はこちらをご覧ください。

【Ruby】gemとは? - rails 技術ブログ



下記のコマンドでbundlerをインストール
$ gem install bundler



bundlerインストール後、使えるようになるbundleコマンド一覧
コマンド 概要
bundle install Gemfileに書かれているgemパッケージをインストールする
bundle update インストール済みのgemパッケージのバージョンを更新する
bundle list インストール済みのgemパッケージの一覧を表示する
bundle init Gemgileを生成する
bundle exec Bundlerでインストールされているgemのパッケージを使用して
コマンドを実行する

引用:パーフェクト Ruby on Rails

よりわかりやすく書いてくれている記事

bundle installbundle updateの違いについて

bundle install と bundle updateの違いについて - Qiita

bundle execについて

bundler、bundle execについて ※自分用メモ - Qiita

【Pundit】認証・認可とは

認証とは

相手が誰かを確認すること

例:
ログインするにはメールアドレスとパスワードを入力する事で、誰であるかを確認し(認証)、ログインできる。


認可とは

ある特定の条件に対して、リソースアクセスの権限を与えること

例:
記事の作成、更新→全員可能
ユーザーの管理(作成、更新)→admin(管理者)のみ


認可を設定するのに便利なGem

Railsでは認可を設定できる、便利なGemがいくつかあります。
特に有名なのが「Pundit」と「cancancan」というGemです。

Pundit
→リソースに対して、どのユーザーであれば処理が許可されるのかを定義するものです。

class ArticlePolicy < ApplicationPolicy
  def index?
    true  #-> 全員が実行可能
  end

  def show?
    true
  end

  def create?
    user.admin? || user.editor?  # -> 管理者(admin)か編集者(editor)が実行可能
  end

  def edit?
    true
  end

  def update?
    user.admin? || user.editor?
  end

  def destroy?
    user.admin? || user.editor?
  end
end


cancancan
→cancanという有名な権限管理gemの後継。cancanの開発がストップしてしまったため、有志達によって、その後継であるcancancanが開発されているそうです。
考え方はPunditと逆で、各ユーザー毎に、どのような権限を持っているのかで権限を管理します。

class Ability
  include CanCan::Ability

  def initialize(user)
    if user.admin?  #adminユーザーは全ての権限が与えられている
      can :manage, :all
     #[can? or cannot?] [:権限], [対象のオブジェクト] の形で権限設定を行う
    end

    if user.member?  #memberユーザーは読み込みの権限が与えられている
      can :read, :all
    end
  end
end

権限は基本的に以下の5種類です。

read: 読み込み, create: 新規作成, update: 更新, destroy: 削除, manage: 全て



■参考にした記事

[Rails5]cancancanってなんぞ? - Qiita

スマホアプリの認証・認可周りを整理した - Qiita

Pundit + Railsで認可の仕組みをシンプルに作る - Qiita