0
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.

routingをドメインごとに切り替える

Last updated at Posted at 2021-02-21

まず任意のドメイン名を追加します。
参考リンク
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実践ガイド

0
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
0
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?