[Ruby-On-Rails] Più modelli utente con Ruby On Rails e ideare percorsi di registrazione separati ma una via di accesso comune


Answers

Non sono riuscito a trovare alcun modo per commentare la risposta accettata, quindi scriverò qui.

Ci sono un paio di cose che non funzionano esattamente come gli stati di risposta accettati, probabilmente perché non è aggiornato.

Ad ogni modo, alcune delle cose che ho dovuto risolvere da solo:

  1. Per UserRegistrationsController, render_with_scope non esiste più, basta usare render :new
  2. La prima riga nella funzione di creazione, sempre in UserRegistrationsController, non funziona come indicato. Prova a usare

    # Getting the user type that is send through a hidden field in the registration form.
    user_type = params[:user][:user_type]
    
    # Deleting the user_type from the params hash, won't work without this.
    params[:user].delete(:user_type)
    
    # Building the user, I assume.
    build_resource
    

invece di semplicemente build_resource . Qualche errore di assegnazione di massa stava arrivando quando invariato.

  1. Se vuoi avere tutte le informazioni dell'utente nel metodo current_user di Devise, apporta queste modifiche:

class ApplicationController < ActionController::Base protect_from_forgery

  # Overriding the Devise current_user method
  alias_method :devise_current_user, :current_user
  def current_user
    # It will now return either a Company or a Customer, instead of the plain User.
    super.rolable
  end
end

Question

Innanzitutto, ho cercato intensamente con Google e Yahoo e ho trovato diverse risposte su argomenti come il mio, ma non coprono proprio ciò che ho bisogno di sapere.

Ho diversi modelli utente nella mia app, per ora sono clienti, designer, rivenditori e sembra che ci siano ancora altri a venire. Tutti hanno dati diversi memorizzati nelle loro tabelle e in diverse aree del sito a cui possono accedere o meno. Così ho pensato di usare il metodo di progettazione + CanCan e di tentare la fortuna con le associazioni polimorfiche, quindi ho ottenuto la configurazione dei seguenti modelli:

class User < AR
  belongs_to :loginable, :polymorphic => true
end

class Customer < AR
  has_one :user, :as => :loginable
end

class Designer < AR
  has_one :user, :as => :loginable
end

class Retailer < AR
  has_one :user, :as => :loginable
end

Per la registrazione ho visualizzazioni personalizzate per ogni tipo di utente e i miei percorsi sono impostati in questo modo:

devise_for :customers, :class_name => 'User'
devise_for :designers, :class_name => 'User'
devise_for :retailers, :class_name => 'User'

Per ora il controller delle registrazioni viene lasciato come standard (che è "ideato / registrazioni"), ma ho pensato, dato che ho avuto diversi dati da memorizzare in diversi modelli, avrei dovuto personalizzare anche questo comportamento !?

Ma con questa configurazione ho avuto aiutanti come customer_signed_in? e designer_signed_in? ma quello di cui ho davvero bisogno è un helper generale come user_signed_in? per le aree del sito accessibili a tutti gli utenti, indipendentemente dal tipo di utente.

Mi piacerebbe anche un helper di percorsi come new_user_session_path invece dei numerosi new_*type*_session_path e così via. In realtà tutto ciò di cui ho bisogno per essere diverso è il processo di registrazione ...

Quindi mi stavo chiedendo SE QUESTO È IL MODO DI ANDARE per questo problema ??? O c'è una soluzione migliore / più facile / meno personalizzabile per questo ???

Grazie in anticipo,
Roberto




Links