일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jsp
- 자바
- 연습문제
- 인프런
- javascript
- 디지몬
- 一日一つメソッド
- 비즈니스일본어
- 日本語
- 일본어
- nico
- vscode
- Flutter
- 単語
- rails7
- Web
- rails
- springboot
- C로 시작하는 컴퓨터 프로그래밍4판
- 반다이몰
- ruby
- DART
- CSS
- 건담베이스
- html
- メソッド
- java
- Python
- Spring
- 건담
- Today
- Total
AR삽질러
初めてのRuby on Rails ミニQ&Aサイト開発 - edit, update 更新(4) 본문
初めてのRuby on Rails ミニQ&Aサイト開発 - edit, update更新(4)
routes.rb
Rails.application.routes.draw do
resources :questions
end
- resource :questionsは質問し対するRESTfulラウトを自動に生成し、index, show, new, edit, update, create, destroy アクションのルートを含む。
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>
<td><%= link_to 'edit', edit_question_path(question) %></td>
</tr>
<% end %>
</table>
- index Viewで全ての ( @questions )を表紙する。
- 各質問に対してshowとeditリンクを提供する。edit_question_path(question)は該当する質問の修正Formに移動するリンクを生成する。
questions_controller.rb
class QuestionsController < ApplicationController
# 質問の編集
def edit
@question = Question.find(params[:id])
end
# 質問の更新
def update
@question = Question.find(params[:id])
if @question.update(question_params)
redirect_to @question
else
render 'edit', status: :unprocessable_entity
end
end
private
def question_params
params.require(:question).permit(:title, :name, :content)
end
end
editアクション
- editアクションはユーザーを特定し、質問を更新するためのFormをユーザーに提供する。
- params[:id]を使ってURLで質問のIDを持ってきて、IDの 'Quesion' インスタンスを探し、@question変数に割り当てる。
updateアクション
- updateアクションは、更新された質問データを受けて該当の質問をupdateする。
- @question.update(question_params)で受けたデータを (qestion_params)で質問をupdateする。
- update成功し、質問の詳細Pageにリダイレクトし、失敗したら更新Formを改めてレンダリングする。
edit.html.erb
<h1>Edit</h1>
<%= form_with model: @question do |form| %>
<% if @question.errors.any? %>
<div>
<ul>
<% @question.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div>
<%= form.label :title %>
<%= form.text_field :title %><br><br>
</div>
<div>
<%= form.label :name %>
<%= form.text_field :name %><br><br>
</div>
<div>
<%= form.label :content %>
<%= form.text_area :content %><br><br>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
- form_with更新する質問( @question )に対するFormを生成する。
- Formの内部で form.label, form.text_field, form_text_area を使って各フィールドに対するlabelと入力フィールドを生成する。
- form.submitを使ってForm提出ボタンを生成する。
https://github.com/designAR/rails_board/tree/update_%2304
'Ruby > RubyOnRails-日本語' 카테고리의 다른 글
Rails 一日一つメソッド (Day15) form_withメソッド (0) | 2024.01.04 |
---|---|
初めてのRuby on Rails ミニQ&Aサイト開発 - delete, destroy 削除(5) (0) | 2024.01.04 |
初めてのRuby on Rails ミニQ&Aサイト開発 - indexAction, Validation(3) (0) | 2024.01.04 |
初めてのRuby on Rails ミニQ&Aサイト開発 - create, show(2) (2) | 2024.01.03 |
Rails 課題 - 生成メソッド、validate、viewの修正、ログイン機能 (0) | 2024.01.03 |