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の指定はお忘れなく。