OKADA LABO

[Ruby on rails][showアクション]登録レコードの個別ページ表示。投稿の詳細ページ的なものを作る

たとえば、ユーザーがつぶやきを登録するアプリがあるとして。
そのつぶやき1件1件の単体の詳細ページを作りたいというとき。
 
考え方は、usrのマイページをshowアクションで作るのと同じ。

 

まず[showアクション]ルーティング
config/routes.rb

Rails.application.routes.draw do
  devise_for :users
  root 'tweets#index'
  get 'tweets/new' => 'tweets#new'
  post 'tweets' => 'tweets#create'
  get 'users/:id' => 'users#show'
  delete 'tweets/:id' => 'tweets#destroy'
  get 'tweets/:id/edit' => 'tweets#edit'
  patch 'tweets/:id' => 'tweets#update'
  get 'tweets/:id' => 'tweets#show' ←#ここ!!ツイート詳細画面
end

 
次にコントローラ
 
app/controllers/tweets_controller.rb

def show
  @tweet = Tweet.find(params[:id])
end

 
paramsのtweet自身のidで、詳細表示したい対象ツイートを見つけて格納。
showアクションのviewを作る。
 
app/views/tweets/show.html.erb

<% if user_signed_in? && current_user.id == @tweet.user_id %> もしログイン状態で現ユーザーidとツイートのユーザidが同じなら

  <%= link_to '編集', "/tweets/#{@tweet.id}/edit", method: :get %> ツイート編集ボタン
  <%= link_to '削除', "/tweets/#{@tweet.id}", method: :delete %> ツイート削除

<% end %>
<%= simple_format(@tweet.text) %>

 

このツイート詳細画面へのリンクを作る

views/tweets/xxxxxx.html.erb

<ul class="more_list">
  <li>
    <%= link_to '詳細', "/tweets/#{tweet.id}", method: :get %> ←ここ!!
  </li>

  <% if user_signed_in? && current_user.id == tweet.user_id %>
  <li>
    <%= link_to '編集', "/tweets/#{tweet.id}/edit", method: :get %>
  </li>
  <li>
    <%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %>
  </li>
  <% end %>

</ul>