일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 건담베이스
- springboot
- DART
- javascript
- Python
- Web
- rails
- 자바
- 건담
- 日本語
- Spring
- 반다이몰
- ruby
- rails7
- 単語
- Flutter
- vscode
- 一日一つメソッド
- C로 시작하는 컴퓨터 프로그래밍4판
- java
- 일본어
- nico
- CSS
- 비즈니스일본어
- 인프런
- 연습문제
- メソッド
- jsp
- html
- 디지몬
- Today
- Total
AR삽질러
Rails 一日一つメソッド (Day17) respond_toメソッド 본문
Rails 一日一つメソッド (Day17) respond_toメソッド
respond_toメソッドとは
- リクエストで指定されたフォーマットによって処理を分ける事ができるメソッド。
respond_toメソッド基本構文
- respond_toメソッドのブロック引数 formatを使って format.形式と記述すると、指定した形式ごとに処理を分ける事ができる。
respond_to do |format|
format.形式 { 処理 }
end
例)indexアクション内で、「HTML形式、JSON形式、JS形式」の各フォーマットのリクエストによって処理を分けたい場合
class UsersControlelr < ApplicationController
def index
respond_to do |format|
format.html # requestされるフォーマットがHTML形式の場合
format.json { 処理 } # requestされるフォーマットがJSON形式の場合
format.js { 処理 } # requestされるフォーマットがJS形式の場合
end
end
end
- respond_toはリクエストされた Accept Headerを元に responseフォーマットを決める
form.html
- ClientがXML形式でResponseを望む時に、基本的に show.html.erb Viewをレンダリングする。
form.json
- ClientがXML形式でResponseを望む時に、@userオブジェクトをJSONフォーマットでレンダリングする。
form.js
- ClientがXML形式でResponseを望む時に、@userオブジェクトをXMLフォーマットでレンダリングする。
SessionsControllerでのrespond_toの使用
- SessionsControllerの createアクションでは respond_toはログインの試みが成功したかどうかに応じて、異なる形式の応答を提供するために使用。
class SessionsController < ApplicationController
def create
user = User.find_by(email: params[:email].downcase)
if user && user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to main_path(user)
else
message = user.nil? ? '등록된 회원이 아닙니다!' : '비밀번호가 정확하지 않습니다.'
respond_to do |format|
format.turbo_stream { render turbo_stream: turbo_stream.update('login_errors', partial: 'sessions/login_error', locals: { message: message }) }
format.html { flash.now[:alert] = message; render 'new' }
end
end
end
end
createアクション
- ユーザーのログインロジックを処理するコードで、ユーザーが提供したEmailとPasswordでユーザーを認証し、成功または失敗によって違うResponseを提供する。
user = User.find_by(email: params[:email].downcase) - 入力されたEmailを小文字で変換した後、ユーザーをDataBaseから探す。if user && user.authenticate(params[:password]) - has_secure_passwordによって提供される authenciateメソッドで、入力されたPasswordがユーザーのPasswordと一致することを確認する。
Loginに成功した時の処理 session[:user_id] = user.id - ユーザーのIDをsessionに保存する。 redirect_to main_path(user)
- ユーザーをmain_pathにリダイレクションする
Loginに失敗した時
- ログインに失敗した場合は、エラー メッセージを設定し、 ユーザーがいない場合は 「登録された会員ではありません!」、パスワードが間違っている場合は 「パスワードが正しくありません」というメッセージを使用する。
respond_toブロックを使用して、Clientの要求形式に応じて異なる応答を提供する。
format.turbo_stream
- Turbo Stream形式にリクエストする時、turbo_stream.updateを使ってPageの特定の部分に login_errorsを sessions/login_errorテンプレートに更新する。
format.html
- HTML形式でリクエストする時、flash.now[:alert] = messageを通じて現在リクエストだけに表紙されるflashメッセージを設定し、newにレンダリングする。
'Ruby > RubyOnRails-日本語' 카테고리의 다른 글
Rails 一日一つメソッド (Day19) Associations-belongs_toメソッド (0) | 2024.01.10 |
---|---|
Rails 一日一つメソッド (Day18) Associations (0) | 2024.01.09 |
Rails 一日一つメソッド (Day16) resourcesメソッド (0) | 2024.01.05 |
初めてのRuby on Rails ミニQ&Aサイト開発 - 回答機能Controller, createAction, destroyAction(7) (2) | 2024.01.05 |
初めてのRuby on Rails ミニQ&Aサイト開発 - 改善、回答機能(6) (0) | 2024.01.05 |