見出し画像

Pic Tweet ツイートを保存しよう

保存とは
formで送信したデータを、データベースへ保存する処理

  • CRUDのC(CREATE)を体験する

  • createアクションの処理を復習する

  • 画面新設の流れを復習する

  • バリデーションを理解する

投稿機能の実装

index一覧表示
show詳細表示
new生成
create保存
edit編集
update更新
destroy削除

ツイート投稿ページの実装


newアクションのルーティングを設定

config/routes.rb ファイルへ
Rails.application.routes.draw do

root to: 'tweets#index'

resources :tweets, only: [:index, :new] ←ここ

end

newアクションをコントローラーに定義

app/controllers/tweets_controller.rb ファイルへ
class TweetsController < ApplicationController
def index
@tweets = Tweet.all
end

def new  ←ここ
@tweet = Tweet.new  ←ここ
end  ←ここ

end

投稿画面のビューを作成

app/views/tweets/new.html.erb ファイルへ
<div class="contents row">
<div class="container">
<h3>投稿する</h3>
<%= form_with(model: @tweet, local: true) do |form| %>
<%= form.text_field :name, placeholder: "Nickname" %>
<%= form.text_field :image, placeholder: "Image Url" %>
<%= form.text_area :text, placeholder: "text", rows: "10" %>
<%= form.submit "SEND" %>
<% end %>
</div>
</div>

リンクで確認
http://localhost:3000/tweets/new

ツイート投稿処理の実装

createアクションのルーティングを設定

config/routes.rb ファイル
Rails.application.routes.draw do
root to: 'tweets#index'
resources :tweets, only: [:index, :new, :create] ←ここ
end

ストロングパラメーター

意図しないデータベースの読み書きを防ぐ

requireリクワイアメソッド

送信されたパラメーターの情報を持つparamsが、使用できるメソッド
requireメソッドは、パラメーターからどの情報を取得するか、選択する
※主にモデル名を指定

permitパーミットメソッド

requireメソッドと同様に、paramsが使用できるメソッド
permitメソッドを使用すると、取得したいキーを指定でき、指定したキーと値のセットのみを取得

プライベートメソッド

ラス外から呼び出すことのできないメソッドのこと
Rubyでは、privateと記述した以下のコードがプライベートメソッド

createアクションをコントローラーに定義

app/controllers/tweets_controller.rb ファイルへ

class TweetsController < ApplicationController
def index
@tweets = Tweet.all
end

def new
@tweet = Tweet.new
end

def create
Tweet.create(tweet_params)
redirect_to '/'
end

private
def tweet_params
params.require(:tweet).permit(:name, :image, :text)
end

end

バリデーション

最後に、空のツイート投稿ができないようにバリデーションの設定

データの入力に制約をかけよう

バリデーション

データを登録する際に、一定の制約をかけることを

  • 空のデータが登録できないようにする(今回のようなブログ記事など)

  • すでに登録されている文字列を登録できないようにする(メールアドレスの登録など)

  • 文字数制限をかける(パスワードなど)

バリデーションを設ける際は、モデルにvalidatesメソッドを記述

validatesバリデーツメソッド

app/models/tweet.rb ファイルへ
class Tweet < ApplicationRecord
validates :text, presence: true  ←ここ
end


この記事が気に入ったらサポートをしてみませんか?