Модель профиля для пользователей Devise?

Я хочу расширить форму регистрации моей установки. Я создал модель профиля и задаюсь вопросом, как я могу добавить конкретные данные формы к этой модели. Где находится элемент управления UserController?

заблаговременно!

Ответ 1

Предполагая, что у вас есть модель пользователя с ассоциацией профиля has_one, вам просто нужно разрешить вложенные атрибуты в User и изменять вид регистрации вашего устройства. Запустите команду "rails generate devise: views", а затем измените представление регистрации dev # new.html.erb, как показано ниже, используя помощник fields_for form, чтобы ваша форма регистрации обновила вашу модель Profile вместе с вашей моделью пользователя.

<div class="register">
  <h1>Sign up</h1>

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

    <h2><%= f.label :email %></h2>
    <p><%= f.text_field :email %></p>

    <h2><%= f.label :password %></h2>
    <p><%= f.password_field :password %></p>

    <h2><%= f.label :password_confirmation %></h2>
    <p><%= f.password_field :password_confirmation %></p>

    <%= f.fields_for :profile do |profile_form| %>
      <h2><%= profile_form.label :first_name %></h2>
      <p><%= profile_form.text_field :first_name %></p>

      <h2><%= profile_form.label :last_name %></h2>
      <p><%= profile_form.text_field :last_name %></p>
    <% end %>

    <p><%= f.submit "Sign up" %></p>

    <br/>
    <%= render :partial => "devise/shared/links" %>
  <% end %>
</div>

И в вашей модели пользователя:

class User < ActiveRecord::Base
  ...
  attr_accessible :email, :password, :password_confirmation, :remember_me, :profile_attributes
  has_one :profile
  accepts_nested_attributes_for :profile
  ...
end

Ответ 2

Чтобы дополнить mbreining answer, в Rails 4.x вам нужно будет использовать сильные параметры, чтобы можно было хранить вложенные атрибуты. Создайте подкласс контроллера регистрации:

RegistrationsController < Devise::RegistrationsController

  def sign_up_params
    devise_parameter_sanitizer.sanitize(:sign_up)
    params.require(:user).permit(:email, :password, profile_attributes: [:first_name, :last_name])
  end
end

Ответ 3

Это не очень понятно из вашего вопроса, но я предполагаю, что ваша модель Devise User и вы создали другую модель Profile, которая принадлежит пользователю.

Вам понадобится создать контроллер для модели пользователя с помощью rails g controller users.

Вам также необходимо создать представления для своих пользователей с помощью rails generate devise:views , чтобы пользователь мог добавлять информацию профиля при создании своей учетной записи.

Оттуда, как и любая другая модель: создайте экземпляр пользователя и профиля и свяжите их. Затем в контроллерах используйте current_user.profile для доступа к текущему профилю пользователя.

Обратите внимание, что если вы собираетесь управлять пользователями таким образом, вам нужно удалить модуль :registerable из модели User (также читайте https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface)

Ответ 4

Другой способ, чтобы не создавать ресурс здания в представлении, - это переписать контроллер разработки, а точнее, новый метод, все, что вам нужно сделать, это изменить его на:

 def new
   build_resource({})
   resource.build_profile 
   respond_with self.resource
 end