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カラムがカラではないかというバリデーションを設ける