RoR - Devise: пользователь не вошел в систему при регистрации через вложенную форму
Мне нужна помощь с приложением RoR, над которым я работаю. Пока что это довольно простое приложение, и я использую Devise для аутентификации.
В моем приложении 2 модели: Пользователь и Партнер. Когда Партнер создает новую учетную запись, его "партнерские" данные сохраняются в таблице "Партнер", а его "пользовательские" данные (в данном случае адрес электронной почты и пароль) - в таблице "Пользователь". Я сделал это, создав форму (partners/ new), которая имеет вложенную форму для пользователей.
Просмотр партнера new.html.erb
<%= f.inputs do %>
<%= f.input :name %>
<%= f.semantic_fields_for :user do |t| %>
<%= t.input :email %>
<%= t.input :password %>
<%= t.input :password_confirmation %>
<% end %>
<%= f.input :telephone %>
<%= f.input :address %>
<%= f.input :payout_details %>
<%= f.input :preferred_payment %>
<%= f.input :terms_and_conditions, :as => :boolean %>
<% end %>
Модель партнера partner.rb
after_initialize :create_user
def create_user
self.user ||= User.new
self.user.roles = "partner"
end
Партнер Контролер
class PartnersController < ApplicationController
# GET /partners
def index
@partners = Partner.all
end
# GET /partners/1
def show
@partner = Partner.find(params[:id])
end
# GET /partners/new
def new
@partner = Partner.new
end
# GET /partners/1/edit
def edit
@partner = Partner.find(params[:id])
end
# POST /partners
def create
@partner = Partner.new(params[:partner])
sign_in @partner.user
respond_to do |format|
if @partner.save
format.html { redirect_to @partner, notice: 'Partner was successfully created.' }
else
format.html { render action: "new" }
end
end
end
# PUT /partners/1
def update
@partner = Partner.find(params[:id])
respond_to do |format|
if @partner.update_attributes(params[:partner])
format.html { redirect_to @partner, notice: 'Partner was successfully updated.' }
else
format.html { render action: "edit" }
end
end
end
# DELETE /partners/1
def destroy
@partner = Partner.find(params[:id])
@partner.destroy
respond_to do |format|
format.html { redirect_to partners_url }
end
end
end
Проблема, с которой я столкнулся, заключается в том, что хотя новый партнер создается и сохраняется как в таблицах "Пользователь", так и в таблицах "Партнер", они не входят в систему автоматически, как при создании нового пользователя по обычному маршруту Devise для пользователей / sign_in.
Может кто-нибудь объяснить, где я иду не так или что я скучаю?
Благодарю.
1 ответ
В вашем контроллере вы делаете:
sign_in @partner.user
ОБНОВИТЬ
def create
@partner = Partner.new(params[:partner])
respond_to do |format|
if @partner.save
sign_in @partner.user
format.html { redirect_to @partner, notice: 'Partner was successfully created.' }
else
format.html { render action: "new" }
end
end