Domanda

sto usando Rails 3 e mettere a punto.

posso avere 2 tipi di utenti chiamo 'admin' e 'cliente', sia memorizzato nella tabella Utenti, differenziato per il valore della colonna booleana 'admin'.

Un 'admin' può essere creato 2 modi:

1) Al momento della creazione di un nuovo account - in questo caso abbiamo anche creare un record associato 'business'

2) Da un account esistente (così si 'business' può avere più 'amministratori') - nel caso in cui vogliamo associare con un record di business esistente

A 'cliente' può essere creato 1 modo:

1) Da un modulo separato rispetto a quelli utilizzati per creare un 'admin' sopra

In tutti i 3 casi verrà utilizzata una forma differente. E al momento della presentazione tutti hanno esigenze diverse:

  • Voglio inviare diversi messaggi di posta elettronica a ciascuno.
  • Nel primo caso 'admin' sopra ho bisogno di controllare se l'URL attività commerciale richiesto è unico, nel secondo caso non lo faccio. E nel caso del cliente non lo faccio.
  • Nel caso in cui il primo 'admin' Voglio creare alcune voci del database di default dopo il completamento di un account, ma non nel secondo caso.
  • Quando un account 'cliente' è stato creato voglio per eseguire alcune altre azioni specifiche per quel tipo di account.

Devo usare lo stesso controller per i diversi tipi di utente, o separarli? Se essi dovrebbero essere gli stessi, come fa a sapere che tipo di utente deve creare?

E i modelli?

Qualche idea su come architetto questo?

Grazie mille.

È stato utile?

Soluzione

La mia ipotesi iniziale sarebbe quello di creare due sottoclassi da User chiamato Admin e Client. Un po 'come questo:

class User < ActiveRecord::Base
end

class Admin < User
  devise :database_authenticatable, :etc

  after_create :create_business
  validates_uniqueness_of :business_url
  # etc
end

class Client < User
  devise :database_authenticatable, :etc
  # etc
end

In seguito, è possibile aggiungere forme diverse in config/routes.rb:

YourApp::Application.routes.draw do

  # for the cases that someone can create their own user
  devise_for :clients
  devise_for :admins

  # for creating it when logged in as admin
  namespace :backend do
    resources :admins
  end
end

Assicurarsi di leggere su STI in Rails e leggere la documentazione di Devise.

Altri suggerimenti

È possibile utilizzare un controller per questo con azioni diverse e dirigere i moduli a quelle azioni:

form_tag(:controller => "people", :action => "search", :method => "get")

rotaie aiutanti modulo .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top