pictweet作成 part2

投稿機能実装

アクション名 new,createを使用

*ルーティングを定義したらコントローラに定義する!

 

1、newアクションを定義する(ルーティング)

Config/routes.rbファイルで新たに:newとルーティングを記述することでhttp://localhost3000/tweets/new

にアクセスした場合にtweetsコントローラのnewアクションが実行される設定ができる

 

2、newアクションをコントローラに定義する

tweets_controller.rbにnewアクションを定義する

def new
    @tweet = Tweet.new
  end

 

3、投稿画面のビューを作成

ツイート投稿画面(new.html.erb)でform_withというヘルパーメソッドを使用する

form_with:railsで情報を送信すためのヘルパーメソッド

データベースに保存するときは以下のようにする

form_with model: モデルクラスのインスタンス do |form|

 

今回は

<%= form_with(model: @tweet, local: true) do |form| %> とする

これで指定しているインスタンス変数はコントローラーで定義した@tweet = Tweet.newのこと

(これをすると投稿先のパスやhttpメソッドを指定する必要がなくなる)

 

4、テーブルにデータを保存する処理 (ルーティング)

createを使用

 

5、tweets_controller.rbを編集(コントローラー)

以下の様に編集する

def create
    Tweet.create(tweet_params)
  end

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

 

①def create~でcreateアクションを定義する

tweet_paramsというストロングパラメータを定義する

・ストロングパラメータ:フォームから入力された情報を指定して安全に受け取るための仕組み

以下はストロングパラメータで使用できるメソッド

  -requireメソッド:取得したい情報を指定することができる

  -permitメソッド:取得したいキーを指定

  -privateメソッド:クラス外から呼び出せないメソッド

 

6、投稿完了画面のビューを作成

create.html.erbを編集

 

7、空のツイートが投稿できない様にバリでショーンを設定する

バリデーションはデータを登録する際に一定の制約をかけること

validates : カラム名、バリデーションの種類

今回はvalidates :name, presence:trueとすることでnameカラムがカラではないかというバリデーションを設ける