-1

状況があります。

>rails -v
Rails 4.2.4

>ruby -v
ruby 2.1.8p440 (2015-12-16 revision 53160) [i386-mingw32]

Apartment gemを使用して、マルチテナントの Time Entry ソリューションを構築しています。これが流れです。私は立ち往生しています。

1) ユーザーがサインアップ ページに到達すると、テナントが作成されます。コントローラーは次のとおりです。

  def new
    @tenant = Tenant.new
  end

  def create
    @tenant = Tenant.new(tenant_params)
    session[:tenant_attributes] = @tenant.attributes

    if @tenant.save

      flash[:success] = "Org ID #{session[:tenant_attributes]["org_identifier"]} created for #{session[:tenant_attributes]["org_name"]} successfully!"
      # Start a job for creating the tenant: this is handled in the model?
      # Apartment::Tenant.switch!("#{session[:tenant_attributes]["org_identifier"]}")
      redirect_to new_user_url(:subdomain => "#{session[:tenant_attributes]["org_identifier"]}")  #new_user_path
    else
      render :new
    end
  end

そしてビュー:

<% provide(:title, 'Sign up') %>
<h1>Welcome!</h1>
<p class="center">
  Make time entry easy, for once.
</p>
<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for (@tenant) do |f| %>
        <%= render 'shared/tenant_error_messages' %>

        <%= f.label :creator_email, "What is your email address?" %>
        <%= f.email_field :creator_email, class: 'form-control' %>

        <%= f.label :org_name, "What is the name of your organization?" %>
        <%= f.text_field :org_name, class: 'form-control' %>

        <%= f.label :org_identifier, "Please choose an abbreviated Org ID" %>
        <%= f.text_field :org_identifier, class: 'form-control' %>

        <%= f.submit "Create your own Org", class: "btn btn-primary" %>

    <% end %>
  </div>
</div>

ご覧のとおり、これはnew_user_url、新しい org_identifier (作成されたばかりのテナント) に等しいサブドメインを渡すヘルパーにリダイレクトするように設定されています。

2) 正しい情報が送信されると、テナントの作成後にリダイレクトが発生します。作成が行われていることを確認しました。リダイレクトが正しいことを確認しました。次に、セッション変数はそれ自体を空にします。

ユーザーコントローラー:

def new
    # Instantiate a new user object at the open of the 'new' view
    @user = User.new

  end

 def create
    # This is the method conducted at the submission of the form and instantiates/saves its own user object
    @user = User.new(user_params)
    if @user.save
      log_in @user
      flash[:success] = "Welcome to the Time Entry Solution!"
      if @user.site_id == "nil"
        redirect_to new_client_path #(:subdomain => session[:tenant_attributes]["org_identifier"])
      else
        redirect_to current_user
      end

    else
      render 'new'
    end
  end

ユーザー/新しいビュー:

<% provide(:title, 'Sign up') %>
<center><p>
  Tell us more about you.
</p>
</center>
<div class="row">
  <div class="col-md-6 col-md-offset-3">
  <% if session[:tenant_attributes] %>

    <h2><%= session[:tenant_attributes] %></h2>
    <h2><%= session[:tenant_attributes] %></h2>
        <% else %>
    <h2> The session variable is empty.</h2>
<% end %>

    <%= form_for (@user) do |f| %>
        <%= render 'shared/error_messages' %>

        <%= f.hidden_field :email, :value => session[:tenant_attributes]["creator_email"] %>

        <%= f.label :first_name %>
        <%= f.text_field :first_name, class: 'form-control' %>

        <%= f.label :last_name %>
        <%= f.text_field :last_name, class: 'form-control' %>

        <%= f.label :password %>
        <%= f.password_field :password, class: 'form-control' %>

        <%= f.label :password_confirmation, "Confirmation" %>
        <%= f.password_field :password_confirmation, class: 'form-control' %>

        <%= f.submit "Create an org ID", class: "btn btn-primary" %>

    <% end %>

  </div>
</div>

必要なセッション値として電子メール パラメータを持つ非表示フィールドを含む後続のフォームを送信すると、「電子メールが無効です」というメッセージが表示されます。

--- !ruby/hash:ActionController::Parameters
utf8: "✓"
authenticity_token: IAEe2EyvrGFa9gMp2X0WnlBzMHF9WdDXhVIs5s3vPkK54xqgICp3T8S/tXQiQnKYqr2CVTH7+0H9G4SaZNGoDQ==
user: !ruby/hash:ActionController::Parameters
  email: ''
  first_name: Anthony
  last_name: Gardner
  password: Password12345!
  password_confirmation: Password12345!
commit: Create an org ID
controller: users
action: create

私は Apartment gem doc に目を通し、ウェブを精査しました。これが失敗する理由がわかりません。でももちろん、目の前にあるのは確かです。どんな助けでも大歓迎です。

アップデート:

Cookieストアのドメインをすべてに設定し、後でアプリコントローラー内をチェックするこのソリューションを見つけました。私はデバイスを使用していませんが、動作するかどうかを確認します。

4

1 に答える 1

0

ここで答えを見つけました: Rails のサブドメイン間でセッション (Cookie) を共有しますか?

問題は session_store.rb にありました。を設定することで、デフォルトの TLD の長さ 1 を無視していることを考慮していませんでしたdomain: :all。localhost の代わりに lvh.me を使用していました。

これが他の人に役立つことを願っています!

于 2016-05-02T20:43:37.657 に答える