1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby】コントローラーでメソッドによるコード省略

Posted at

読んでなるほど!と思うのに、しばらくするとなんだっけ?ってなるシリーズその1

・edit
・show
この2つのアクションの記述をぎゅっとコンパクトに。

使用するのは、
before_action
onlyオプション

tweets_controller.rb
class TweetsController < ApplicationController

  def edit
    @tweet = Tweet.find(params[:id])
  end
#↑editの中身「@tweet = Tweet.find(params[:id])」と、
#↓showの中身が同一の記述になっている
  def show
    @tweet = Tweet.find(params[:id])
  end

  private
end

重複している部分を「set_tweet」として、privateメソッドに移し替える

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

before_actionの記述方法

tweets_controller.rb

before_action :処理させたいメソッド名

before_action :set_tweet, only: [:edit, :show]

最後にまとめると

tweets_controller.rb

class TweetsController < ApplicationController
  before_action :set_tweet, only: [:edit, :show]

  def edit
  end

  def show
  end

  private

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

editとshowに入っていた
@tweet = Tweet.find(params[:id])
これをset_tweetとインスタンスで定義。
そして一番上で
:set_tweet, only: [:edit, :show]
としてeditとshowのみに使うようonlyオプションで指定

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?