今回は、ツイート投稿機能を実装してデータベースへ保存する流れをアウトプットしていきます。
【アウトプット】
投稿機能とデータ保存には《new》《create》アクションを使用する必要がある。
〇投稿機能
①《new》をルーティングに設定する。
config/routes.rb
【resources : tweets, only: [:index, :new]】に編集する。
②《new》をコントローラーに定義する。
app/controllers/tweets_controller.rb
```
def
end
```
を追加する。
※登録画面作成する際に、form_with をしようするためインスタンス変数を定義する。
③投稿画面を作成する。
app/views/tweetsの配下にnew.htmlのview fileを作成、編集する。
```
<h1>投稿する</h1>
<%= 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 %>
```
※ニックネーム、画像、文を投稿できる。
※newアクションで定義した@tweetにはTweetクラスのインスタンスが保存されている。modelオプションに指定されているのが、生成されたばかりのインスタンスならリクエストは《create》となる。
④《create》をルーティングに設定する。
config/routes.rb
【resources : tweets, only: [:index, :new, :create]】に編集する。
⑤《create》をコントローラーに定義する。
app/controllers/tweets_controller.rb
```
def create
Tweet.create(tweet_params)
redirect_to '/'
end
private
def tweet_params
params.require(:tweet).permit(:name, :image, :text)
end
```
を追加する。
※privateメソッドを使用 Class外から呼び出されなくなり、エラーを防ぐ。また、可読性が上がる。
※params.requireメソッドで()内、tweetの情報を取得するか選択している。
※permitメソッドで()内にキーを指定し指定したキーと値のセット のみを取得する。
⑥データ入力に制約を設ける。
モデルファイルに
【validates : カラム名, バリデーションの種類】を記述することで使用できる。
app/models/tweet.rb
```
class Tweet < ApplicationRecord
validates :text, presence: true
end
```
と編集する。
※text →ツイート、presence:ture→空ではない? を指している。
ツイートが空欄の場合、ツイートは登録できなくなる。