アプリケーションのデータ保存(createアクション実装)

newアクションの実装に続き
createアクションの実装手順を記載

①ルーティングの設定

Rails.application.routes.draw do
  root to: 'tweets#index'
  resources :tweets, only: [:index, :new, :create]
end

②コントローラーの設定(ストロングパラメータを使用)
意図しないデータの変更を防ぐために使用。require / permitメソッドを組み合わせて使う。

# require / permitの書き方
params.require(:モデル名) #パラメータからどの情報を取得するか選択

params.require(:モデル名).permit(:キー名) #取得したいキーとそのキーの値のみを取得できるようになる

params.require(:post).permit(:text, :image) #textとimageの値のみ取得

この記述はプライベートメソッドとして記述する。
Class外から呼び出すことが不可能になるため、エラーを防ぐ役割を担うため
繰り返し使用するコードを集約等できることで、コードが見やすくなるため

class PostsController < ApplicationController
  def index
    (処理)
  end

  def new
    (処理)
  end

  def create
    (処理)
  end

  private  # private以下の記述はすべてプライベートメソッドになる

  def private_method  # プライベートメソッド
    (処理)
  end

  def any_method  # プライベートメソッド
    (処理)
  end

end

これらを踏まえてtests_controller.rbを記述する

class TweetsController < ApplicationController

  def index
    @tweets = Tweet.all
  end

  def new
    @tweet = Tweet.new
  end

  def create
    Tweet.create(tweet_params) #tweet_paramsがストロングパラメータ。createメソッドの引数に使用し、プライベートメソッドのtweet_paramsを呼び出す。中身をtweetsテーブルに保存できるように設定。
  end

  private
  def tweet_params #createメソッドの引数に指定しているため、tweet_paramsメソッドの処理が行われる
    params.require(:tweet).permit(:name, :image, :text) #行われる処理
  end

end


③create用のviewを作成

④バリデーションをかける
空のデータは登録できない、同じメールアドレスは登録できない、パスワードの文字数等、制限をつけることができる
validates :カラム名, バリデーションの種類

validates :name, presence: true #presence: trueでnameカラムが空でないかというバリデーションがかかり、登録にはnameカラムが空欄以外である必要がある

※バリデーションはモデルに記載する
app/models/tweet.rb

class Tweet < ApplicationRecord
  validates :text, presence: true
end