일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디지몬
- javascript
- 一日一つメソッド
- Python
- 건담
- vscode
- jsp
- html
- Spring
- java
- rails
- DART
- rails7
- C로 시작하는 컴퓨터 프로그래밍4판
- ruby
- springboot
- 연습문제
- 자바
- Web
- CSS
- 비즈니스일본어
- 건담베이스
- Flutter
- 日本語
- 인프런
- 일본어
- メソッド
- nico
- 単語
- 반다이몰
- Today
- Total
AR삽질러
初めてのRuby on Rails ミニQ&Aサイト開発 - indexAction, Validation(3) 본문
初めてのRuby on Rails ミニQ&Aサイト開発 - indexAction, Validation(3)
아랑팡팡 2024. 1. 4. 12:38
初めてのRuby on Rails ミニQ&Aサイト開発 - indexAction(3)
1. indexアクションでユーザーの一覧を表紙する
questions_controller
class QuestionsController < ApplicationController
# 質問一覧表紙
def index
@questions = Question.all
# p @questions
end
end
- indexアクションに 's'がつく理由は、Ruby on Railsで広く使われる慣例(convention)のためです。 RailsはMVC(Model-View-Controller)パターンに従い、各コンポーネントの名前と使用方法がこの慣例によって決まります。
- 's'が複種系を表して、 'Question'オブジェクトが含まれていることを意味する。
@questions = Question.all
- Questionモデルの全てのレコードをDataBaseから持ってくる。@questionsはこのレコードを含まれた配列。
index.html.erb
<h1>Questions</h1>
<table>
<tr>
<th>ID</th>
<th>Title</th>
<th>Name</th>
<th>Content</th>
</tr>
<% @questions.each do |question| %>
<tr>
<td><%= question.id %></td>
<td><%= question.title %></td>
<td><%= question.name %></td>
<td><%= question.content %></td>
<td><%= link_to 'show', question_path(question) %></td>
</tr>
<% end %>
</table>
@questions変数に含まれている 各'Question'オブジェクトに対する情報をTableで表す。
<% @questions.each do |question| %>
- @questions配列の各Questionオブジェクトに対し反復する。
<%= question.id %> ...
- Tableの表に情報を表紙する。
<%= link_to 'show', question_path(question) %>
- 各行に"show"リンクを追加して、そのQuestionオブジェクトの詳細ページ(showアクション)に移動できるリンクを提供する。
実装方式
- ユーザーがQuestionsのindexページ(例:/questions)をrequestする。
- indexアクションは、データベースからすべてのQuestionレコードを取得し、@questions変数に割り当てる。
- ビューは@questions配列の各Questionオブジェクトをテーブル形式で表し、各オブジェクトに対する詳細ページへのリンクを提供する。
2. Validation
Validationとは?
- 記述、入力したデータが、あらかじめ規定された条件や仕様、形式などに適合しているかどうかを検証、確認すること。
例)未入力チェック、文字数チェック
バリデーションの練習
- Title : 未入力チェック
- Name : 未入力チェック
- Content : 未入力チェック、5文字以上であること
question.rb
class Question < ApplicationRecord
validates :title, presence: true
validates :name, presence: true
validates :content, presence: true, length: { minimum: 5 }
end
Questionモデルに有効性検証を作成
- validates :title, presence: true : titleフィールドが空でないことを示す。
- validates :content, presence: true, length: { minimum: 5 } : コンポーネント フィールドは空でないだけでなく、少なくとも 5 文字以上でなければならないことを示す。
questions_controller.rb
class QuestionsController < ApplicationController
# 質問の登録
def create
# p params
# p question_params
# Questionモデルを初期化
@question = Question.new(question_params)
# QuetionモデルをDBへ保存
if @question.save
# showレダイレクト
redirect_to @question
else
render 'new', status: :unprocessable_entity
end
end
private
def question_params
params.require(:question).permit(:title, :name, :content)
end
end
@question=Question.new(question_params):question_paramsメソッドを介してフィルタリングされたパラメータを使用して新しいQuestionオブジェクトを生成します。
if @question.sa ve:@questionオブジェクトをデータベースに保存しようと試みます。 もし有効性検証を通過すると、オブジェクトは保存され、show ページにリダイレクトされます。
else: 有効性検証を通過できない場合は、再びnewテンプレートをレンダリングします。 このとき、ステータスコードで:unprocessable_entityを使用してクライアントにエラーが発生したことを通知します。
new.html.erb
<h1>New Question</h1>
<%= form_with(model: @question) do |form| %>
<% if @question.errors.any? %>
<% end %>
<div>
<ul>
<% @question.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<div>
<%= form.label :title %><br>
<%= form.text_field :title %>
</div>
<div>
<%= form.label :name %><br>
<%= form.text_field :name %>
</div>
<div>
<%= form.label :content %><br>
<%= form.text_area :content %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
https://github.com/designAR/rails_board/tree/index_action_%2303
'Ruby > RubyOnRails-日本語' 카테고리의 다른 글
初めてのRuby on Rails ミニQ&Aサイト開発 - delete, destroy 削除(5) (0) | 2024.01.04 |
---|---|
初めてのRuby on Rails ミニQ&Aサイト開発 - edit, update 更新(4) (0) | 2024.01.04 |
初めてのRuby on Rails ミニQ&Aサイト開発 - create, show(2) (2) | 2024.01.03 |
Rails 課題 - 生成メソッド、validate、viewの修正、ログイン機能 (0) | 2024.01.03 |
Rails 一日一つメソッド (Day14) redirect_toメソッド (0) | 2024.01.03 |