혼잣말 앱 만들어볼까 ⑦

14311 단어 Rails
다음은 혼잣말 상세 페이지를 만듭니다.
show 작업의 경로를 설정합니다.
config/routes.rb
Rails.application.routes.draw do
  root to: 'tweets#index'
  resources :tweets, only: [:index, :new, :create, :destroy, :edit, :update, :show]
end
7개의 동작이 있기 때문에 only 옵션이 필요하지 않으니 요약해 보세요.
config/routes.rb
Rails.application.routes.draw do
  root to: 'tweets#index'
  resources :tweets

라우팅이 설정되었습니다.
첫 페이지의 보기를 편집하세요.
app/views/tweets/index.html.erb
<div class="contents row">
  <% @tweets.each do |tweet| %>
    <div class="content_post" >
      <p><%= tweet.text %></p>
       <p><%= image_tag tweet.image.variant(resize: '500x500'), class: 'tweet-image' if tweet.image.attached?%></p>
      <span class="name">
        <%= tweet.name %>
      </span>
      <%= link_to '詳細', tweet_path(tweet.id), method: :get %>
      <%= link_to '編集', edit_tweet_path(tweet.id), method: :get %>
      <%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %>
    </div>
  <% end %>
</div>
컨트롤러가 쇼 동작을 추적하도록 하세요.
app/controllers/tweets_controller.rb
class TweetsController < ApplicationController

  def index
    @tweets = Tweet.all
  end

  def new
    @tweet = Tweet.new
  end

  def create
    Tweet.create(tweet_params)
  end

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

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

  def update
    tweet = Tweet.find(params[:id])
    tweet.update(tweet_params)
  end

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

  private
  def tweet_params
    params.require(:tweet).permit(:name,:text,:image)
  end
end
세부 페이지 뷰를 설정합니다.
app/views/tweets/show.html.erb
<div class="contents row">
    <div class="content_post" >
      <p><%= tweet.text %></p>
       <p><%= image_tag tweet.image.variant(resize: '500x500'), class: 'tweet-image' if tweet.image.attached?%></p>
      <span class="name">
        <%= tweet.name %>
      </span>
      <%= link_to '編集', edit_tweet_path(tweet.id), method: :get %>
      <%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %>
    </div>
</div>
아래의 행동이라면 성공이다.

이상의 기능으로 완성되었습니다.
그러나 컨트롤러의 설명을 보면 같은 기술이 반복적으로 사용된다.
같은 처리를 하나로 정리하고 재구성하자.

before_action


컨트롤러에 의해 정의된 작업을 수행하기 전에 일반적인 작업을 수행할 수 있습니다.
class コントローラ名 < ApplicationController
  before_action :処理させたいメソッド名
왜냐하면 편집 동작과 쇼 동작의 기술은 똑같기 때문에.
set_tweet 이 동작은 before_로 요약됩니다.액션으로 설정하세요.
app/controllers/tweets_controller.rb
class TweetsController < ApplicationController
  before_action :set_tweet, only: [:edit, :show]

  def index
    @tweets = Tweet.all
  end

  def new
    @tweet = Tweet.new
  end

  def create
    Tweet.create(tweet_params)
  end

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

  def edit
  end

  def update
    tweet = Tweet.find(params[:id])
    tweet.update(tweet_params)
  end

  def show
  end

  private

  def tweet_params
    params.require(:tweet).permit(:name, :image, :text)
  end

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

좋은 웹페이지 즐겨찾기