0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Railsチュートリアル】第6-10章 まとめ 

Last updated at Posted at 2024-03-23

第6章

データベースを変更しないようにコンソールを使う

コンソール

rails console --sandbox

オブジェクトが有効化を確認

コンソール

>> user.valid?
true

データベースにオブジェクトを保存

コンソール

>> user.save

オブジェクトの生成とデータベースへの保存

コンソール

>> User.create(name: "A Nother", email: "another@example.org")

データベースからの削除

コンソール

>> foo.destroy

idからデータを検索

コンソール

>> User.find(1)

値からデータを検索

コンソール

>> User.find_by(email: "michael@example.com")

データベースの最初のデータを検索

コンソール

>> User.first

データベースの全てのデータを検索

コンソール

>> User.all

オブジェクトの再読み込み

コンソール

>> user.email
=> "mhartl@example.net"
>> user.email = "foo@bar.com"
=> "foo@bar.com"
>> user.reload.email
=> "mhartl@example.net"

オブジェクトの更新

コンソール

>> user.update(name: "The Dude", email: "dude@abides.org")

特定の属性のみ更新

コンソール

>> user.update_attribute(:name, "El Duderino")

エラーメッセージの確認

コンソール

>> user.errors.full_messages
=> ["Name can't be blank"]

テストが失敗したときにエラーメッセージを出力

test/models/user_test.rb

assert @user.valid?, "#{valid_address.inspect} should be valid"

メールフォーマットを正規表現で検証

app/models/user.rb

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX }

データを複製する

test/models/user_test.rb

duplicate_user = @user.dup

データが重複していないことを検証

app/models/user.rb

uniqueness: true

大文字小文字の区別する

app/models/user.rb

case_sensitive: true 

一意性を強制するマイグレーション

db/migrate/[timestamp]_add_index_to_users_email.rb

add_index :users, :email, unique: true 

データベースの保存前に行う処理

app/models/user.rb

before_save { self.email = email.downcase }

ハッシュ化されたパスワードの実装

app/models/user.rb

has_secure_password

第7章

デバック情報をブラウザに表示

app/views/layouts/application.html.erb

<%= debug(params) if Rails.env.development? %>

デバック情報をターミナルに表示

app/controllers/users_controller.rb

debugger

デバック情報をターミナルに表示

app/controllers/users_controller.rb

<%= gravatar_for @user %>

オブジェクトに対するフォームを作成する

app/views/users/new.html.erb

<%= form_with(model: @user) do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name %>

HTTPステータスコード422をレスポンスとして設定

app/views/users/new.html.erb

status: :unprocessable_entity

キーに紐づけられたパラメータの中で選択されたものだけ変更可能

app/controllers/users_controller.rb

params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)

受け取った整数(第1引数)に基づき英単語(第2引数)を複数形にする

app/controllers/users_controller.rb

>> helper.pluralize(1, "error")
=> "1 error"
>> helper.pluralize(5, "error")
=> "5 errors"

ブロックないの処理を実行する前後で値(第1引数)が変わらないことを確認

test/integration/users_signup_test.rb

assert_no_difference 'User.count' do

ブロックないの処理を実行する前後で変わる値(第1引数)の差異(第2引数)を確認

test/integration/users_signup_test.rb

assert_no_difference 'User.count' do

POSTリクエストの送信結果から指定されたリダイレクト先に移動する

test/integration/users_signup_test.rb

follow_redirect!

第8章

POSTリクエストの送信結果から指定されたリダイレクト先に移動する

test/integration/users_signup_test.rb

follow_redirect!

フラッシュメッセージ表示後、リクエストが発生したときに消滅する

app/controllers/sessions_controller.rb

flash.now[:danger] = 'Invalid email/password combination'

セッションをリセットする

app/controllers/sessions_controller.rb

reset_session

右辺に値があれば左辺に格納、なければ何もしない

app/helpers/sessions_helper.rb

@current_user ||= User.find_by(id: session[:user_id])

HTTPのリクエスト(第3引数)を指定

app/views/layouts/_header.html.erb

<%= link_to "Log out", logout_path,
    data: { "turbo-method": :delete } %>

第9章

cookiesにデータを保存

app/helpers/sessions_helper.rb

cookies.permanent.encrypted[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token

cookiesのデータを破棄

app/helpers/sessions_helper.rb

cookies.delete(:user_id)
cookies.delete(:remember_token)

第10章

新しいデータか確認

コンソール

>> User.new.new_record?
=> true

該当メソッドが実行される直前で実行されるメソッド

コンソール

before_action :logged_in_user, only: [:edit, :update]

ページネーション

app/views/users/index.html.erb

<%= will_paginate %>

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?