Rails создает пользователя и модель own_to во время регистрации - PullRequest
0 голосов
/ 08 июня 2019

Я хочу, чтобы когда пользователь регистрировался (Devise), он создавал свою первую учетную запись «Профиль» одновременно с формой регистрации.

Я попытался с помощью fields_for, но он не работает. Я могу добавить скрытое поле в форму регистрации, потому что «пользователь» еще не создан. Как я могу это сделать?

Модель

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable,  and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :trackable

class Profile < ApplicationRecord

  belongs_to :user #creator

Просмотров (Зарегистрируйся)

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

    <%= f.fields_for :profiles, resource.profiles.build do |s| %>

        <%= s.text_field :name%>
     <% end %>
<% end %>

1 Ответ

1 голос
/ 08 июня 2019

Вы могли бы перезвонить в модели.Например, after_save, а затем создать профиль.

Вы можете посмотреть обратные вызовы здесь: https://guides.rubyonrails.org/active_record_callbacks.html#available-callbacks

И это может выглядеть так:

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable,  and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :trackable

   after_save :create_profile

 def create_profile
    Profile.create(user: self,...)
  end
end

Другой вариантбудет генерировать контроллер устройства самостоятельно.Вы можете выполнить шаги из их readme: https://github.com/plataformatec/devise/wiki/Tool:-Generate-and-customize-controllers

И, как они предлагают, настроить метод создания, добавив Profile.new(...)

def create
  super  #inherits from devise controllers and create the user model
  # now you can add your own code creating the Profile
  Profile.new(user: resource, ...)
end
...