まず任意のドメイン名を追加します。
参考リンク
・https://qiita.com/tatsumin0206/items/8b4d0930c0f58cef7813
##ホスト名に制約を加える
設定ファイルが自動的に読み込まれるようにconfig/initializerにhosts.rb(任意)を作成。
Rails.application.configure do
config.admin1 = {
admin: { host: "admin.example.com", path: "" }
}
end
admin1というキーに対し、ハッシュをセットしています。
これを参照するには次のように書きます。
Rails.application.routes.draw do
constraints host: config[:admin][:host] do
namespace: :user, path: config[:admin][:host] do
root "top#index"
resources :session, only: [:create, :destroy]
end
end
end
constraintsは指定されたホスト名のみのアクセスを許可しています(ホスト名による制約)
namespaceでホスト名へのパスを設定しています。
namespaceを設定した時は以下の3つが追加されます。
1.URLのパスの先頭にadminが追加される
2.コントローラーの先頭にadminフォルダが付加される
3.ルーティングの先頭にadminが付加される
#Rspecでのテストを実行
require "rails_helper"
describe "ルーティング" do
example "管理者トップページ" do
config = Rails.application.config.admin1
url = "http://#{config[:staff][:host]}/#{config[:staff][:path]}"
expect(get: url).to route_to(
host: config[:staff][:host],
controller: "staff/top",
action: "index"
)
end
end
簡単に解説します。
config = Rails.application.config.admin1
設定したファイルをconfigに代入しています。
url = "http://#{config[:admin][:host]}/#{config[:admin][:path]}"
②で設定したハッシュのキーをurlに指定しています。
expect(get: url).to route_to(
host: config[:admin][:host],
controller: "admin/top",
action: "index"
)
route_toはルーティングのマッチャーです。
getリクエストでroute_to以下をハッシュで指定しています。
このホストにgetリクエストを送るとstaff/topコントローラーが指定され、indexアクションが働くという意味になります。
参考文献
Ruby on Rails6実践ガイド