Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

rails学習 7日目その2

Railsチュートリアル 第6章

コントローラーには複数形、モデルには単数形を用いる。

6.1.3 ユーザーオブジェクトを作成する

$rails console --sandbox

普通のコンソールだとデータベースへの変更は反映されてしまうが、--sandboxをつけるとconsoleが戻った時にrollbackしてくれるのでデータベースへの変更も安心して行える。

・user.createはuser.newとuser.saveをまとめて行うためのもの。

6.1.5 ユーザーオブジェクトを更新する

user.update_attributes(name:〇〇,email:〇〇)

元々のname,emailから上書きで変更される。ただしupdate_attributesは変更する値の1つでも保存ができないと全ての変更がキャンセルとなる。
単数形だとupdate_attribute、複数形だとupdate_attributesになる

user.valid?

user.valid?を使うとuserがvalidatesに引っかかってないかどうか調べる。引っかかっていない場合はtrue引っかかった場合はfalseを出す。またfalseが出た時にどのvalidatesに引っかかったのかわからない場合

user.errors.full_message

を使うとどこがダメだったのか教えてくれる。

6.2.4 フォーマットを検証する

アドレスのvalidatesで問題の一つがアドレスの形式で登録しないといけないというvalidatesである。正しい形式以外をはじくvalidateは

format:{with:正規表現}

という形でvalidatesを書いていく。そして次に正規表現をどうするのかを決めて実装する。
メールフォーマットの正規表現は

\/A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

となる
※解説はrailsチュートリアルを参照
これをVALID_EMAIL_REGEXに代入して実装する

VALID_EMAIL_REGEX = \/A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
format:{with:VALID_EMAIL_REGEX}

となる

アドレスの一意性

本来アドレスは大文字と小文字の区別がない。しかしプログラミング上ではもちろん違いがあるので同じアドレスであったとしても大文字の部分と小文字の部分の違いによって違うものと判断され、validatesに引っかかってしまう。なのでそれを解消するためのコードを書く。

uniqueness: {case_sensitive: false}

上記を記入すると大文字小文字関係なく同じアドレスとして認証されるようになる。

データベースにインデックスをつける

データベースにインデックスをつけると内容を複製して調べやすい順番で並べ替えてくれる。そのため検索などを使うときにデータベースの上から順番に見るより調べやすいデータベースの順番で検索した方が素早く検索ができる。そのためにつけるのがインデックス(index)というもの。

add_index :users, :email, unique:true

add_index :調べやすくして欲しいテーブル名, :そのテーブルの基準になるカラム名(emailだとアルファベット順に並ぶなど), unique:true

6.3 セキュアなパスワードを追加する

パスワードをそのままテーブルに保存してしまうとセキュリティ面でも誰かに見られたら悪用されてしまう。
このためにパスワードを暗号化して保存できるようにする。

①Userモデルでhas_secure_passwordを呼ぶ

has_secure_passwordを呼ぶことで
・password_digestを利用できるようになる
・passwordとpassword_comfirmationが使えるようになる
・authenticateメソッドが使えるようになる(ログイン時に暗号化したパスワード同士を照らし合わせてログインさせる機能)

②password_digestカラムを作る(userテーブルに)

マイグレーションファイルでテーブルにpassword_digestカラムが入るようにする。
(ファイル名の末尾にto_usersとすることでusersテーブルに入るようになる)

③パスワードを暗号化するためにbcryptをGemfileに追加する

gem 'bcrypt',         '3.1.12'

bundle installを行いgemを反映させる

④パスワードのvalidatesを作る

validates :password, presence: true, length: { minimum: 6 }

パスワードのvalidatesを作る(空文字は入れない、文字は最小で6文字というvalidatesになっている)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away