Rails 远程表单并重定向到子域

问题描述

我阅读了我可以在这里找到的所有问题,但仍然无法完成这项工作。 我正在使用 Rails 6 和 gem ros/apartment。 我有一个远程表单,用户将在其中输入他们的子域。提交它应该重定向到子域根页面,但它没有发生。

config/routes.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

app/views/accounts/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 %>

app/controllers/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

我想这可能与本地主机有关,对吗?但是我怎样才能让它在生产环境和本地主机上都能工作呢?还是别的什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...