Modello di profilo per gli utenti di Devise?

Voglio estendere il modulo di registrazione della mia installazione di installazione. Ho creato un modello Profile e ora mi sto chiedendo come aggiungere dati specifici del modulo a questo modello. Dove si trova l’ UserController di ideato?

Grazie in anticipo!

Supponendo che tu abbia un modello utente con has_one profilo has_one , devi semplicemente consentire gli attributi nidificati in Utente e modificare la tua vista di registrazione del dispositivo.

Esegui le rails generate devise:views comando rails generate devise:views , quindi modifica la vista registrations#new.html.erb come mostrato di seguito utilizzando i fields_for con i fields_for per fare in modo che il modulo di registrazione aggiorni il modello Profile insieme al modello utente.

 

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 %>

E nel tuo modello utente:

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

Per completare la risposta di mbreining, in Rails 4.x è necessario utilizzare parametri forti per consentire la memorizzazione degli attributi nidificati. Creare una sottoclass di controller di registrazione:

 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 

Non è molto chiaro dalla tua domanda, ma presumo che il tuo modello di Devise sia User e hai creato un altro Profile modello che appartiene all’utente.

Avrai bisogno di creare un controller per il tuo modello di utente con gli rails g controller users .

Dovrai anche generare le visualizzazioni per i tuoi utenti con i rails generate devise:views modo che l’utente possa aggiungere informazioni sul profilo quando crea il suo account.

Da lì, è proprio come qualsiasi altro modello: crea un’istanza utente e profilo e collega i due. Quindi, nei controller, utilizzare current_user.profile per accedere al profilo dell’utente corrente.

Nota che se hai intenzione di gestire gli utenti in questo modo, devi rimuovere il :registerable modulo :registerable dal modello User (leggi anche https://github.com/plataformatec/devise/wiki/How-To:-Manage -users-through-a-CRUD-interface )

Un altro modo per non mettere la risorsa di costruzione nella vista è riscrivere il controller di sviluppo e per essere precisi, il nuovo metodo, tutto quello che devi fare è cambiarlo in:

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

Raccomando di creare gli utenti di Profile for Devise per una risposta più recente alla stessa domanda e utilizzando Rails 4 + Devise