У меня есть ситуация.
>rails -v
Rails 4.2.4
>ruby -v
ruby 2.1.8p440 (2015-12-16 revision 53160) [i386-mingw32]
Я создаю многопользовательское решение Time Entry, используя жемчуг Apartment. Вот поток. Я застрял.
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 и прошерстил Интернет. Я не вижу причин, по которым это должно потерпеть неудачу. Но, конечно, я уверен, что это прямо перед моим лицом. Любая помощь будет оценена по достоинству.
ОБНОВИТЬ:
Я нашел это решение что я буду пытаться, устанавливая домен хранилища файлов cookie для всех, а затем проверяя внутри контроллера приложения. Я не использую devise, но посмотрим, сработает ли он.
protect_from_forgery with: :null_session
), делает свое дело. Я просто беру информацию из базы данных. Но мне нужно, чтобы информация о сеансе сохранялась для моего входа в систему и обработчика сеансов. Есть предположения? - person Anthony D Gardner   schedule 29.04.2016