[ruby-on-rails] concepire e più modelli "utente"


Answers

Sono in scarpe simili a te, dopo aver provato tutti i tipi di approccio sono andato con un singolo modello User, che sarebbe appartenuto a ruoli polimorfici. Questo sembra il modo più semplice per ottenere un accesso singolo.

Il modello utente conterrà solo le informazioni specifiche per il log-in.

Il modello Role memorizzerebbe i campi specifici per ciascun ruolo, nonché altre associazioni specifiche per il ruolo.

Le nuove registrazioni verranno personalizzate per ogni tipo di utente (ruoli) tramite i singoli controller e quindi creando gli attributi nidificati per l'utente.

class User < ActiveRecord::Base
    #... devise code ...
    belongs_to :role, :polymorphic => true
end

class Member < ActiveRecord::Base
    attr_accessible :name, :tel, :city  #etc etc....
    attr_accessible :user_attributes #this is needed for nested attributes assignment

    #model specific associations like  
    has_many :resumes

    has_one :user, :as => :role, dependent: :destroy
    accepts_nested_attributes_for :user
end 

Percorsi: solo materiale normale per il modello Membro.

resources :members
#maybe make a new path for New signups, but for now its new_member_path

Controller: devi build_user per gli attributi nidificati

#controllers/members_controller.rb
def new
    @member = Member.new
    @member.build_user
end

def create
    #... standard controller stuff
end

views / soci / new.html.erb

<h2>Sign up for new members!</h2>
<%= simple_form_for @member do |f| %>

    # user fields
    <%= f.fields_for :user do |u| %>
      <%= u.input :email, :required => true, :autofocus => true %>
      <%= u.input :password, :required => true %>
      <%= u.input :password_confirmation, :required => true %>
    <% end %>

    # member fields
    <%= f.input :name %>
    <%= f.input :tel %>
    <%= f.input :city %>

    <%= f.button :submit, "Sign up" %>
<% end %>

Vorrei sottolineare che non c'è NECESSITÀ di raggiungere gemma nested_form; poiché il requisito è che l'utente possa appartenere solo a un tipo di ruolo.

Question

Sto usando rails 3.2 e concepisco 2.0 e sono abbastanza nuovo per Rails.

Requisiti

Mi piacerebbe raggiungere il seguente:

  • avere 2 o più modelli "utente", ad es. Membro, Cliente, Amministratore
  • tutti i modelli condividono alcuni campi obbligatori (ad esempio email e password)
  • ogni modello può avere alcuni campi univoci (ad es. società solo per cliente)
  • alcuni campi possono essere condivisi ma non hanno la stessa validazione (ad esempio il nome è richiesto per il Cliente ma facoltativo per il Membro)
  • tutti i campi devono essere compilati durante il processo di registrazione, quindi i moduli sono diversi
  • il modulo di accesso dovrebbe essere unico

Possibili soluzioni

Ho cercato su Google e cercato per un po 'di tempo, ma non mi sembra giusto (sono un ragazzo di Java, mi dispiace :) e ora sono abbastanza confuso. Sono emerse due soluzioni:

Utente single devise

Questa è la risposta più frequente. Basta creare l'utente predefinito e creare relazioni tra Membro -> Utente e Cliente -> Utente. La mia preoccupazione qui è come posso ottenere un processo di registrazione personalizzato per ciascun modello? Ho provato cose diverse ma tutto è finito come un casino!

Più utenti di ideazione

Questo risolve il processo di registrazione personalizzato e mi sembra giusto, ma il modulo di accesso univoco è un blocco. Ho trovato una risposta su SO ( Devise - login da due modelli ) che suggerisce di sovrascrivere Devise :: Models :: Authenticatable.find_for_authentication (condizioni). Sembra complicato (?) E visto che sono nuovo alle rotaie, mi piacerebbe sapere se questo potrebbe funzionare?

Grazie per il tuo consiglio!




Quindi cosa c'è che non va? Basta eseguire rails g devise:views [model_name] , personalizzare ciascun modulo di registrazione e in config/initializer/devise.rb basta mettere config.scoped_views = true .




Related