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