投稿機能アプリの実装の復習を備忘録としてあげてます!
目的
- CRUD(UPDATE)
- HTTPメソッドのPATCH
- edit アクションの処理の理解
- updateアクションの処理の理解
ツイート編集機能の実装
1. ツイート編集画面のルーティング設定
2. 編集ボタン編集ボタンをビューに追加
3. editアクションをコントローラーに定義
4. 編集画面のビューファイルを作成
5. ツイートの更新を行うためのルーティングを設定
6. updateアクションをコントローラーに定義
「editアクションで編集ページを「表示」→「updateアクションでデータの更新」
edit アクションのルーティング設定
config/routes.rb
〜略〜
resource :tweets, only: [:edit]
〜略〜
ターミナルで
rails routesコマンドで確認
ターミナル
edit_tweet GET /tweets/:id/edit(.:format) tweets#edit
編集ボタンを投稿一覧に追加
link_to
メソッドを使用する
遷移先がツイートごとに異なるため、
編集画面へ遷移するパスには、 tweetのid をパラメータ設定する
app/views/tweets/index.html.erb
~略~
<%= link_to '編集', edit_tweet_path(tweet.id) %>
~略~
editアクションをコントローラーに定義
編集→更新は すでに存在しているレコードを選択して中身を書き換える
編集したいレコードを @tweet
に代入し、ビューに受け渡すことで編集画面で利用できる
app/controllers/tweets_controller.rb
~略~
def edit
@tweet = Tweet.find(params[:id])
end
~略~
編集画面をビューに作成
情報を入力するために必要
入力情報の送信先は/tweets/編集するツイートのid
編集の際は HTTPメソッドのPATCH
を使用
HTTPメソッド
GET: サーバーからブラウザに情報を返す
POST: ブラウザからサーバーに情報を送信し、サーバーに情報を保存
DELETE: ブラウザからサーバーに情報を送信し、サーバーの情報を削除する
PATCH: ブラウザからサーバーに情報を送信し、サーバー内に情報を置き換える
app/views/tweets
ディレクトリの中にedit.html.erb
というビューファイルを作成
app/views/tweets/edit.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>
ツイート更新処理の実装
updatアクションのルーティング設定
config/routes.rb
resources :tweets, only: [:index, :new, :create, :destroy, :edit, :update]
ターミナル
tweet PATCH /tweets/:id(.:format) tweets#update
updateアクションをコントローラーに定義
app/controllers/tweets_controller.rb
def update
tweet = Tweet.find(params[:id])
tweet.update(tweet_params)
redidect_to root_path
end