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
Другие вопросы по тегам