TIL/20211017/RubyOnRailsデータの転送
サーバへのデータ転送
paramsとして抽出できるデータ
1.POSTで送信されたデータ
2.クエリー・パラメータ
3.ルーティングパラメータ
formでデータを渡すプロセス
1.ビューからコントローラへのデータ転送
2.コントローラからクライアントから送信されたデータを抽出する
3.関連ビューからコントローラ応答のデータを出力する
Railsの構文の使用
1.form:htmlからサーバに値を渡す
2.params:コントローラからクライアントからのリクエスト情報を抽出する
3.@q変数:インスタンス変数、actionで使用、押し出しビューで使用
4.<%=%>:erbファイル用、<%=%>でRubyコードを提供
CRUD機能の実装
1.CRUDモデルの作成
rails gモデル[型番名]
ex) rails g model Post
2.移行ファイルにテーブル情報を作成する
生成された移行ファイルからテーブル情報を作成
class CreatePosts < ActiveRecord::Migration[5.2]
def change
create_table :posts do |t|
t.string :title
t.text :content
t.timestamps
end
end
end
3.移行ファイルを使用したテーブルの作成rake db:migrate
次の図のように作成を完了します.
テーブル情報はdb/schemaです.rbに含める
作成、Read
合計3ページ
1.index:すべての記事のページを表示する
2.new:執筆フォーム付きページ
3.show:記事の詳細ページを表示する
@posts = Post.allコードはすべてのPostモデルのデータを文章とする
(モデルクラス内のすべてのメソッドはSELECT*FROM「テーブル名」を実行し、テーブル内のすべての値をモデルオブジェクトの配列に戻します)
p16
RailsがHTTPメソッド(POST,PUT,DELETEなど)によりリクエストを送信すると自動的に乱数トークンを生成して送信する
データの格納を要求する場合、HTTPメソッドはgetメソッドよりもpostメソッドを使用するのに適しています.
更新、破棄
作成するページ:フォームを含むeditページ
作成するアクション
1.edit
2.update(文章の修正)
3.destroy(記事削除)
destroyはSQLにおけるDELETE FROM[テーブル名]WHERE条件である.クエリーの実行と同じ
完全なコード
routes.rb
Rails.application.routes.draw do
get 'posts/index'
get 'posts/new'
post 'posts/create'
get 'posts/show/:id' => "posts#show"
get 'posts/edit/:id' => "posts#edit"
post 'posts/update/:id' => "posts#update"
get 'posts/destroy/:id' => "posts#destroy"
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
posts_controller.rbclass PostsController < ApplicationController
def index
@posts = Post.all
end
def new
end
def create
Post.create(title: params[:title], content: params[:content])
redirect_to "/posts/index"
end
def show
@post = Post.find(params[:id])#:id 값을 추출한 뒤 모델의 find 메서드로 넘어온 id 값을 Post 모델에서 검색하고, 그 결과를 @post에 저장
end
def edit
@post = Post.find(params[:id])#:id 값을 추출한 뒤 모델의 find 메서드로 넘어온 id 값을 Post 모델에서 검색하고, 그 결과를 @post에 저장
end
def update
@post = Post.find(params[:id])
@post.update(title: params[:title], content: params[:content])
redirect_to "/posts/show/#{@post.id}" ##{}안에 변수명을 입력하면 문자열 안에 값이 포함된다
end
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to "/posts/index"
end
end
index.html.erb<a href="/posts/new">새 글 작성</a>
<hr/>
<table border="1">
<tr>
<th>id</th>
<th>제목</th>
<th>내용</th>
<th>생성일</th>
<th>수정일</th>
</tr>
<% @posts.each do |post| %> #@posts 객체 배열 내용 순서대로 출력
<tr>
<td><%= post.id %></td>
<td><%= post.title %></td>
<td><%= post.content %></td>
<td><%= post.created_at %></td>
<td><%= post.updated_at %></td>
</tr>
<% end %>
</table>
new.html.erb<h4>
새 글 작성
</h4>
<form action="/posts/create" method="POST">
<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden">
<input type="text" name="title">
<br/>
<textarea name="content"></textarea>
<button>
제출
</button>
</form>
show.html.erb<p>
title : <%= @post.title %>
</p>
<p>
content : <%= @post.content %>
</p>
<a href="/posts/index">Back</a>
edit.html.erb<h4>
기존 글 수정
</h4>
<form action="/posts/update/<%= @post.id %>" method="POST">
<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden">
<input type="text" name="title" value="<%= @post.title %>">
<br/>
<textarea name="content"><%= @post.content %></textarea>
<button>
수정
</button>
</form>
Reference
この問題について(TIL/20211017/RubyOnRailsデータの転送), 我々は、より多くの情報をここで見つけました https://velog.io/@jeongyunjang/TIL-20211017-ROR-데이터-전달하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol