Pergunta

Estou usando o Rails 3 e invente.

Posso ter 2 tipos de usuários que estou chamando de 'Admin e' Client ', ambos armazenados na tabela de usuários, diferenciados pelo valor da coluna Boolean' Admin '.

Um 'admin' pode ser criado de 2 maneiras:

1) Após a criação de uma nova conta - neste caso, também criamos um registro de 'negócios' associado

2) De dentro de uma conta existente (para que um 'negócio' possa ter vários 'administradores') - no caso, queremos associá -la a um registro de negócios existente

Um 'cliente' pode ser criado 1 Way:

1) de um formulário separado do que aqueles para criar um 'administrador' acima

Em todos os três casos, uma forma diferente será usada. E, mediante envio, todos eles têm requisitos diferentes:

  • Eu quero enviar e -mails diferentes para cada um.
  • No primeiro caso de 'admin' acima, preciso verificar se o URL de negócios solicitado é único, no segundo caso que não. E no caso do cliente eu não.
  • No primeiro caso 'admin', quero criar algumas entradas de banco de dados padrão após a conclusão de uma conta, mas não no segundo caso.
  • Quando uma conta de 'cliente' é criada, quero executar outras ações específicas para esse tipo de conta.

Devo usar o mesmo controlador para os diferentes tipos de usuário ou separá -los? Se eles deveriam ser iguais, como sabe que tipo de usuário ele deve criar?

E os modelos?

Alguma idéia de como arquitetar isso?

Muito obrigado.

Foi útil?

Solução

Meu palpite inicial seria criar duas subclasses de User chamado Admin e Client. Um pouco assim:

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

Em seguida, você pode adicionar formas diferentes em 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

Leia o STI no Rails e leia a documentação do Devise.

Outras dicas

Você pode usar um controlador para isso com ações diferentes e direcionar seus formulários para essas ações:

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

a partir de Os trilhos formam ajudantes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top