Railsで他のControllerのactionを呼び出す
2017年3月1日
Railsで別のpathで同じページを表示したかったので、ちょっとお試し。
(以下のアクセスで同じページを表示したい)
/users /hoges
Renderでやる場合
元になるコントローラー
class UsersController < ApplicationController
def index
@users = User.all
end
end
がある時に、
class HogeController < ApplicationController
def users
@users = User.all
render template: 'users/index'
end
end
とやればいいんですが、viewで必要な変数が多い時に処理が冗長になる。
元になるコントローラを親classにしてしまう
class UsersController < ApplicationController
def index
@users = User.all
end
end
こいつ↑(Users#index)を他のコントローラー↓(Hoge)から呼びたい。
# 親classをUsersControllerに
class HogeController < UsersController
def users
# 親のindexを呼び出す
public_method(:index).super_method.call
end
end
これでHoge#usersがUsers#indexになりました。
routesに設定する
ただ、普通にやるなら
get '/users', to: 'users#index' get '/hoges', to: 'users#index'
これで良いですが・・w
同じページを別のpathで表示するのであれば、canonicalの指定はお忘れなく。