de concevoir et de multiples “utilisateur” modèles
Je suis à l'aide de rails 3.2 et concevoir 2.0 et je suis assez nouveau dans les Rails.
Exigences
J'aimerais atteindre les objectifs suivants:
- ont 2 ou plus "facile" des modèles, par exemple. Ses Membres, Ses Clients, Administrateur
- tous les modèles partagent certains champs requis (par exemple. e-mail et mot de passe)
- chaque modèle peut avoir certains champs uniques (par exemple. société pour le Client uniquement)
- certains champs peuvent être partagées, mais pas le même processus de validation (par exemple. le nom est obligatoire pour le Client, mais facultatif pour les Membres)
- tous les champs doivent être remplis pendant le processus d'enregistrement, de sorte que les formes sont différentes
- le formulaire de connexion doit être unique
Solutions possibles
J'ai cherché et cherché sur StackOverflow pour un temps assez long, mais rien ne semble la droite pour moi (je suis un Java gars, désolé 🙂 et maintenant, je suis assez confus. Deux solutions s'est présenté:
Unique de concevoir utilisateur
C'est la réponse la plus fréquente. Il suffit de créer de la valeur par défaut de concevoir l'Utilisateur et de créer des relations entre les États-->l'Utilisateur et le Client-->Utilisateur.
Ma préoccupation ici est de savoir comment puis-je réaliser sur mesure un processus d'inscription pour chaque modèle? J'ai essayé différentes choses mais tout s'est terminé comme un gâchis!
Multiples concevoir des utilisateurs
Cela résout la coutume processus d'inscription, et semble bonne pour moi, mais l'unique formulaire de connexion est un bloqueur. J'ai trouvé une réponse sur SO (Concevoir - la connexion à partir de deux modèles) qui suggère de remplacer Concevoir::Models::Authenticatable.find_for_authentication(conditions).
Cela semble compliqué (?) et depuis je suis nouveau sur les rails, je voudrais savoir si cela pourrait fonctionner?
Merci pour vos conseils!!!
Vous devez vous connecter pour publier un commentaire.
Bienvenue à bord Java mec =), j'espère que vous apprécierez les Rails monde.
Simplement, pour résoudre votre problème, vous avez 2 solutions:
Lequel choisir?
Il dépend de la commune attributs des rôles. Si ils sont presque commun (par exemple, tous ont un nom, e-mail, mobile, ...) et un peu d'attributs sont différents, je vous recommande fortement de l'IST solution.
Comment faire de l'IST?
1. Il suffit de créer le le dispositif de l'utilisateur du modèle et de la table à l'aide de la commande
rails generate devise User
2. Ajouter une colonne nommée
type
avec le type de données chaîne de la table user de la base de données à l'aide d'une migration.3. Pour chaque type d'utilisateur de créer un modèle (par exemple
rails g model admin
)4. Faire de l'Admin classe hérite de l'utilisateur modèle
Qu'est-ce qui vous fait =) ... Yupeee
Pour créer un admin exécutez la commande
Admin.create(...)
où les points, c'est l'admin attributs par exemple l'e-mail, nom, ...Je pense que ce question pourrait vous aider aussi
config.scoped_views = true
?Je suis dans les mêmes chaussures que toi, après avoir essayé toutes sortes d'approches, je suis allé avec un seul modèle d'Utilisateur, qui pourrait appartenir à polymorphes rôles. Cela semble être la façon la plus simple pour atteindre connexion unique.
Le modèle de l'Utilisateur contient les informations spécifiques à une session seulement.
Le modèle de Rôle serait de stocker des champs spécifiques à chaque rôle, ainsi que d'autres associations spécifiques pour le rôle.
Nouvelles inscriptions sera adaptée à chaque type d'utilisateur (rôles) via des contrôleurs individuels, puis de créer les conditions imbriquées les attributs de l'Utilisateur.
Routes -- ordinaire des choses pour le Membre modèle.
Contrôleur -- vous avez à build_user pour imbriquée attributs
vues/membres/new.html.erb
Je tiens à souligner qu'il n'est PAS NÉCESSAIRE d'atteindre pour nested_form gem; car l'exigence est que l'Utilisateur ne peut belong_to un type de Rôle.
has_one
dans le modèle de l'Utilisateur etbelongs_to
dans le Membre de modèle, de sorte que vous pouvez éviter le polymorphe de la relation. Est-il une raison pourquoi vous avez fait le contraire?polymorphic
s'applique uniquement auxbelongs_to
. Il y a d'autres solutions pour "inverser polymorphe", mais semble hors de portée.J'ai trouvé un moyen d'aller, et je suis très heureux avec elle jusqu'à présent. Je vais décrire ici pour les autres.
Je suis allé avec le single "utilisateur" de la classe. Mon problème était de réaliser sur mesure un processus d'inscription pour chaque pseudo modèle.
modèle/de l'utilisateur.rb:
Puis j'ai adapté http://railscasts.com/episodes/217-multistep-forms et http://pastie.org/1084054 d'avoir deux d'inscription sur les chemins avec un substituée contrôleur:
config/routes.rb:
contrôleurs/utilisateurs/registrations_controller.rb:
J'ai créé un assistant de classe qui sait les champs pour valider à chaque étape
et de mon point de vue:
new.rb
new_client.rb
partiel selon l'étape de l'assistant:_new_client_1.rb
_new_client_2.rb
new_member.rb
partiel selon l'étape de l'assistant:_new_member_1.rb
_new_member_2.rb
Quel est donc le problème? Il suffit d'exécuter
rails g devise:views [model_name]
, personnaliser chacun des formulaires d'inscription et dansconfig/initializer/devise.rb
vient de mettreconfig.scoped_views = true
.scoped_views
option dansconfig/initializers/devise.rb
? Il est disableb par défaut pour améliorer les performances.