0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Progate Ruby on Rails5 IV ~ V 個人的ざっくりまとめ

Posted at

投稿の編集

流れは、以下の通り。
編集したい投稿を取得
その投稿のcontentの値を上書き
データベースに保存

ターミナル
$ rails console

> post = Post.find_by(id: 1)  #①
> post.content = "Rails"  #②
> post.save  #③

フォームに初期値を設定

textareaタグで囲んだ部分を初期値として設定できる。

<textarea>初期値です。</textarea>  <!-- テキストエリアに「初期値です。」が入る -->

特定のアクションで、URLのidと同じidの投稿データをデータベースから取得し、そのcontentの値を初期値に設定したりできる。

posts_controller.rb
def edit
  @post = Post.find_by(id: params[:id])
end
posts/edit.html.erb
<textarea><%= @post.content %></textarea>

投稿内容の更新

流れは、以下の通り。
URLに含まれたidを用いて、データベースから投稿データを取得
フォームから編集内容を受け取り、投稿データを更新

posts/edit.html.erb
<%= form_tag("/posts/#{@post.id}/update") do %>
  :
  <textarea name="content"><%= @post.content %></textarea>  <!-- name属性を指定する -->
  :
<% end %>

フォームの入力内容が変数paramsに代入され、updateアクションに送信される

posts.controller.rb
def update
  @post = Post.find_by(id: params[:id])
  #params[:content]はフォームから送信された値を受け取る
  @post.content = params[:content]
  @post.save
  :
end

投稿の削除

流れは、以下の通り。
データベースから削除したい投稿を取得する
destroyメソッドを用いて、投稿を削除する

@post = Post.find_by(id: params[:id])  #①
@post.destroy  #②

getとpostの使い分け

「get」はデータベースを変更しないアクション

「post」はデータベースを変更するアクション

post用のリンク

link_toメソッドの第三引数に**{method: "post"}**と指定する

posts/show.html.erb
<%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"}) %>

バリデーション

バリデーションとは、不正なデータがデータベースに保存されないように、データをチェックする仕組みのこと。

バリデーションはモデルで設定する。

models/post.rb
class Post < ApplicationRecord
  #validates :検証するカラム名, {検証する内容}
  validates :content, {presence: true}  #{presence: true}は空の投稿を防ぐバリデーション

  validates :content, {length: {maximum: 140}}  #{length: {maximum: 140}}は最大文字数140文字に設定

  #検証する内容を複数指定するやり方
  validates :content, {presence: true, length: {maximum: 140}}  #コンマで区切る
end

renderメソッド

renderメソッドは、別のアクションを経由せずに、直接ビューを表示することができる。

**render("フォルダ名/ファイル名")**のように表示したいビューを指定する。

redirect_toメソッドと違い、そのアクション内で定義した@変数をビューでそのまま使うことができる。

posts_controller.rb
def update
  @post = Post.find_by(id: params[:id])
  @post.content = params[:content]
  #render("フォルダ名/ファイル名")
  render("posts/edit")
end

エラーメッセージの表示

posts/edit.html.erb
<!-- @post.errors.full_messagesにエラーメッセージの配列が入っているため、each文を用いることで全て表示することができる -->
<% @post.errors.full_messages.each do |message| %>
  <%= message %>
<% end %>

フラッシュ

フラッシュとは、ページ上に一度だけ表示されるメッセージのこと。表示された後はページを更新したり、別のページに移動するとフラッシュは表示されなくなる。

アクションで変数flash[:notice]に文字列を代入すると、flash[:notice]をビューで使うことができる。

posts_controller.rb
def update
  if @post.save
    flash[:notice] = "表示したい文字列"
    :
  end
end
layouts/application.html.erb
<!-- フラッシュメッセージが存在する場合のみ、表示する -->
<% if flash[:notice] %>
  <div class="flash">
    <%= flash[:notice] %>
  </div>
<% end %>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?