2012-12-02 9 views
7

Ho cercato per circa un'ora e ho trovato un'enorme quantità di domande che descrivono come aggiungere campi al modello utente di Devise. Tuttavia non sono riuscito a trovare nulla che spiegasse in modo chiaro come aggiungere uno o più modelli al processo di registrazione.Rails Devia registrazione con un modello aggiuntivo

Al momento della registrazione desidero che l'utente compili un indirizzo e-mail, una password e inoltre il mio modello cliente, modello di società e modello di indirizzo (quindi ho tutte le informazioni necessarie per l'esecuzione dell'applicazione web).

I miei modelli sono come questo

user.rb

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :email, :password, :password_confirmation, :remember_me, :client 

    belongs_to :client 
end 

client.rb

class Client < ActiveRecord::Base 
    attr_accessible :bankaccount, :email, :logo, :mobile, :phone, :website 

    has_many :users 

    has_one :company 
    has_one :address 
    accepts_nested_attributes_for :company, :address 
end 

Credo che l'unico modo per farlo è quello di creare il mio RegistrationsController così posso fare @client = Client.new e poi fare questo a mio avviso:

<%= f.simple_fields_for @client do |ff| %> 
    <%= f.simple_fields_for :company do |fff| %> 
    <% field_set_tag t(:company) do %> 
     <%= ff.input :name %> 
    <% end %> 
    <% end %> 
    <%= f.simple_fields_for :address do |fff| %> 
    //address inputs 
    <% end %> 
    <% end %> 

    <fieldset> 
    <legend><%= t(:other) %></legend> 
    // other inputs 
    </fieldset> 
<% end %> 

La ragione per cui ho bisogno di lavorare in questo modo è perché ho più utenti che possono rappresentare lo stesso client (e quindi hanno bisogno di accedere agli stessi dati). Il mio cliente possiede tutti i dati nell'applicazione e quindi deve essere creato prima che l'applicazione possa essere utilizzata.

risposta

6

Okay, mi ci sono voluti circa 8 ore ma alla fine ho capito come farlo funzionare (se qualcuno ha un modo migliore/più pulito di farlo, per favore fatemelo sapere).

Prima ho creato il mio Devise::RegistrationsController per costruire correttamente la risorsa:

class Users::RegistrationsController < Devise::RegistrationsController 

    def new 
    resource = build_resource({}) 
    resource.build_client 
    resource.client.build_company 
    resource.client.build_address 
    respond_with resource 
    end 

end 

Dopo di che ho solo bisogno di regolare config/routes.rb per farlo funzionare:

devise_for :users, :controllers => { :registrations => "users/registrations" } do 
    get '/users/sign_up', :to => 'users/registrations#new' 
    end 

anche Ho avuto un errore nel mio dispositivo/registrazioni/new.html.erb. Dovrebbe essere f.simple_fields_for :client anziché f.simple_fields_for @client.

Ora crea correttamente tutti gli oggetti per gli attributi nidificati e lo salva automaticamente quando salva la risorsa.

Problemi correlati