微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?