imotanの気になる木

21歳、大学4年(未就活)の意識高い系の大学生の日記的ブロクです。

Railsで他のControllerのactionを呼び出す

Railsで他のControllerのactionを呼び出す

privateを使うと、他のクラスから呼び出されないようにと出てくる、、うむ、そもそも他のクラスからコントローラから呼び出した経験がないぞ!どういうことだ!!ということで他のコントローラからアクションを呼び出して見ます。

renderでやる場合

元になるコントローラ

users_controller.rb

class UsersController < ApplicationController
  def index
    @users = User.all
  end
end

呼び出すやつ

hoge_contoller.rb
class HogeController < ApplicationController
  def users
    @users = User.all
    render template: 'users/index'
  end
end

templateオプションは別のコントローラから呼び出す際に利用します。

だが、これだと変数が多い時にコントローラの処理が冗長になるのがきになる

元になるコントローラを親クラスにしてしまう

hoge_contoller.rb
# 親classをUsersControllerに
class HogeController < UsersController
  def users
    # 親のindexを呼び出す
    public_method(:index).super_method.call
  end
end