如何解决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 举报,一经查实,本站将立刻删除。