Webエンジニア目指して#38
どうも桃鉄マンです
名古屋に戻ったということで、久しぶりに友人と集まり桃鉄とスマブラをしました。やっぱりオフラインじゃないと得られる楽しさが違いますね。最高の時間でした
さてProgateのRails IVです
getとpostの違い
get...データベースに変更を加えない post...データベースに変更を加える
データベースからレコードを編集する流れ
変数A=モデル名.find_by(編集対象のカラム名:値)
変数A.内容を変更したいカラム名
変数A.save
編集ページの作成
詳細ページから編集ページへのリンク(detail.html.erb)
<%= link_to("編集","/post/#{@post.id}/edit") %>
link_to
を使って閲覧中の詳細レコードのidを取得し編集ページへ飛ばす
編集ページ(edit.html.erb)
<textarea name="message"><%= @post.message %></textarea> <input type="submit" value="保存">
後述のactionから対象のレコードのmessageカラムを取得しtextareaのデフォルト表示にする
routing
get 'post/:id/edit'=> 'post#edit'
このように変数は末尾じゃなくても仕込める
controller
def edit @post=Post.find_by(id: params[:id]) end
:idをURLから拾って、編集対象のレコードを取得する
編集機能の実装
編集ページ
<%= form_tag("/post/#{@post.id}/update") do %> <textarea name="message"><%= @post.message %></textarea> <input type="submit" value="保存"> <% end %>
form_tag
を使って:message
をupdateアクションに送信
routing
post 'post/:id/update' => 'post#update'
:id
も一緒に送信する
action
def update @post=Post.find_by(id: params[:id]) @post.message=params[:message] @post.save redirect_to("/post/index") end
編集対象レコードを取得し、編集内容の:message
をmessageカラムに代入し、saveメソッドを実行→投稿一覧にリダイレクト
結果
データベースからレコードを削除する流れ
変数A=モデル名.find_by(編集対象のカラム名:値)
変数A.destroy
削除機能の実装
routing
post 'post/:id/delete' => 'post#delete'
今回は直でdestroyメソッドのactionへ通したい
詳細ページから削除actionへのリンク
<%= link_to("削除","/post/#{@post.id}/delete", {method:"post"}) %>
link_to
はgetで記述されたactionしか検索しないらしい
このように第3引数に,{method:"post"}
をつけることでpostで記述したものを検索してくれる
action
def delete @post=Post.find_by(id: params[:id]) @post.destroy redirect_to("/post/index") end
対象レコードを取得しdestroy
メソッドで削除、一覧へリダイレクト
結果