¿Modelo de perfil para usuarios de Devise?

Quiero extender la forma de registro de mi instalación de diseño. Creé un modelo de perfil y me pregunto ahora, ¿cómo puedo agregar datos específicos del formulario a este modelo? ¿Dónde está ubicado el UserController of idee?

¡Gracias por adelantado!

Suponiendo que tiene un modelo de usuario con una has_one perfil has_one , simplemente necesita permitir atributos nesteds en el usuario y modificar su vista de registro de diseño.

Ejecute el comando rails generate devise:views , luego modifique la visualización de los registrations#new.html.erb , como se muestra a continuación, usando fields_for form helper para que su formulario de registrations#new.html.erb actualice su modelo de perfil junto con su modelo de usuario.

 

Sign up

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

<%= f.label :email %>

<%= f.text_field :email %>

<%= f.label :password %>

<%= f.password_field :password %>

<%= f.label :password_confirmation %>

<%= f.password_field :password_confirmation %>

<%= f.fields_for :profile do |profile_form| %>

<%= profile_form.label :first_name %>

<%= profile_form.text_field :first_name %>

<%= profile_form.label :last_name %>

<%= profile_form.text_field :last_name %>

<% end %>

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


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

Y en su modelo de Usuario:

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

Para complementar la respuesta de mbreining, en Rails 4.x necesitarás usar parámetros potentes para permitir almacenar atributos nesteds. Crear una subclase de controlador de registro:

 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 

No está muy claro a partir de su pregunta, pero supongo que su modelo Devise es User y usted creó otro modelo Profile que pertenece al usuario.

Tendrá que crear un controlador para su modelo de usuario con los rails g controller users .

También deberá generar las vistas para sus usuarios con rails generate devise:views para que el usuario pueda agregar información de perfil cuando está creando su cuenta.

A partir de ahí, es como cualquier otro modelo: crear una instancia de usuario y perfil y vincular los dos. Luego, en los controladores, use current_user.profile para acceder al perfil del usuario actual.

Tenga en cuenta que si va a administrar a los usuarios de esta manera, deberá eliminar el módulo :registerable del modelo de User (también lea https://github.com/plataformatec/devise/wiki/How-To:-Manage -usuarios a través de una interfaz CRUD )

Otra forma de no colocar recursos de construcción en la vista es reescribir el controlador de diseño y, para ser exactos, el nuevo método, todo lo que necesita hacer es cambiarlo a:

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

Recomiendo buscar Crear perfil para usuarios de Devise para una respuesta más reciente a la misma pregunta y usar Rails 4 + Devise