今回もテックキャンプのカリキュラムの復習です!
目的
- showアクションの処理の理解
- before_actionを理解
showアクションのルーティングを設定
詳細画面のパスは、削除や編集と同じくツイートごとに管理
idが1のツイート詳細画面は、/tweets/1
パス
config/routes.rb
resources :tweets, only: [:show]
もし、7つのアクションがある場合
変更前
resources :tweets, only: [:index, :new, :create, :destroy, :edit, :update, :show]
変更後
resources :tweets
rails routesを実行
ターミナル
weet GET /tweets/:id(.:format) tweets#show
詳細ボタンを投稿一覧に追加
app/views/tweets/index.html.erb
<%= link_to '詳細'、tweet_path(tweet.id) %>
showアクションをコントローラーに定義
- データベースから所得するため
showアクションでは、詳細を表示したいツイートの情報をビューに受け渡すだけ
controllers/tweets_controller.rb
def show
@tweet = Tweet.find(params[:id])
end
app/views/tweets
ディレクトリの中に show.html.erb
作成
app/views/tweets/show.html.erb
<div class="contents row">
<div class="content_post" style="background-image: url(<%= @tweet.image %>);">
<div class="more">
<span><%= image_tag 'arrow_top.png' %></span>
<ul class="more_list">
<li>
<%= link_to '編集', edit_tweet_path(@tweet.id) %>
</li>
<li>
<%= link_to '削除', tweet_path(@tweet.id), data: { turbo_method: :delete } %>
</li>
</ul>
</div>
<p><%= @tweet.text %></p>
<span class="name"><%= @tweet.name %>
</span>
</div>
</div>
ツイートが1つしか表示されないような画面に遷移される
URLにtweetのidに含まれる
同じコードをメソッドにまとめる
before_actionメソッド
コントローラーで定義されたアクションが実行される前に、共通の処理を行うことができる
例)
before_action :処理させたいメソッド名
onlyオプション
resourcesと同様に only
や except
などのアプションを使用することによって、
どのアクションの実行前に、処理を実行させるか などの制限が可能
app/controllers/tweets_controller.rb
class TweetsController < ApplicationController
before_action set_tweet, only: [:edit, :show]
この記述により
edit,showアクションが実行される前に、set_tweetに定義されている処理が実行されるようになる