Удаленная форма Rails и перенаправление на поддомен

#ruby-on-rails #multi-tenant #apartment-gem

Вопрос:

Я прочитал все вопросы, которые смог найти здесь, и все еще не мог заставить это работать. Я использую рельсы 6 и драгоценный камень ros/квартира. У меня есть удаленная форма, в которой пользователь вводит свой поддомен. Отправив его, вы должны перенаправить его на корневую страницу поддомена, но этого не происходит.

конфигурация/маршруты.rb

 class SubdomainBlank
  def self.matches?(request)
    request.subdomain.blank?
  end
end

class SubdomainPresent
  def self.matches?(request)
    request.subdomain.present?
  end
end

Rails.application.routes.draw do
  constraints(SubdomainBlank) do
    root 'landing_page#index'
    as :account do
      get 'sign_up', to: 'accounts#new'
      post 'sign_up', to: 'accounts#create'
      get 'sign_in', to: 'accounts#sign_in'
      post 'sign_in', to: 'accounts#set_tenant'
    end
  end

  constraints(SubdomainPresent) do
    root 'home#index', as: :subdomain_root
    devise_for :users,
               controllers: { invitations: 'users/invitations' }
  end
end
 

приложение/просмотры/учетные записи/sign_in.html.erb

 <%= form_with(url: sign_in_path, method: :post) do |f| %>
  <div class="input-group mb-3">
    <%= f.text_field :subdomain, autofocus: true, class: 'form-control', placeholder: 'Enter your subdomain' %>
    <span class="input-group-text" id="basic-addon2">.keepthemposted.com</span>
  </div>
  <%= f.submit "Proceed", url: sign_in_path, method: :post,  class:"btn btn-primary btn-user btn-block", data: { disable_with: "Lookin for account..." } %>
<% end %>
 

приложение/контроллеры/accounts_controller.rb

 class AccountsController < ApplicationController
  layout 'account'
  # skip_before_action :authenticate_user, only: %i[new create]
  def new
    @account = Account.new
    @account.build_owner
  end

  def create
    ActiveRecord::Base.transaction do
      @account = Account.new(account_params)
      unless @account.valid?
        respond_with(broadcast_errors(@account, account_params))
        return
      end
      Apartment::Tenant.create(@account.subdomain)
      Apartment::Tenant.switch!(@account.subdomain)
      unless @account.save!
        respond_with(broadcast_errors(@account, account_params))
        return
      end
      redirect_to new_user_session_path(subdomain: "#{@account.subdomain}.lvh.me")
      # redirect_to home_index_path
    rescue StandardError
      # respond_with(broadcast_errors(@account, account_params))
    end
  end

  def set_tenant
    if params[:subdomain].blank?
      flash.now[:notice] = 'Enter your subdomain'
      return
    end

    account = Account.find_by(subdomain: params[:subdomain])
    if account.nil?
      flash.now[:notice] = "We couldn't find #{params[:subdomain]}.keepthemposted.com"
      return
    end

    render js: "window.location='#{subdomain_root_path(subdomain: account.subdomain)}'"
  end
end
 

Я думаю, это может быть что-то с localhost, верно? Но как я мог заставить его работать как на производстве, так и на локальном хостинге? Или это что-то другое?