Permettre à un utilisateur d'ajouter de nouveaux utilisateurs à Concevoir, et de rester connecté en tant qu'eux-mêmes
Je suis en utilisant Ruby on Rails avec Concevoir, Rails 4.1.0.rc1, Ruby 2.1.0p0, concevoir-3.2.4
J'ai suivi le tutoriel de Rails en Fonte Épisode n ° 209 d'obtenir concevoir installé et fonctionne. Je peux me connecter et de se déconnecter et d'enregistrer de nouveaux utilisateurs.
J'ai étendu mon modèle utilisateur pour inclure la non-modification des informations comme la date de naissance, nom et prénom.
Suivant ce blog, j'ai ajouté un contrôleur utilisateur & vues pour ajouter des fonctionnalités supplémentaires, telles qu'une liste de tous les utilisateurs que je n'ai pas vu de concevoir.
https://github.com/danweller18/devise/wiki/Allow-Users-to-View-Profile-and-List-All-Users
J'ai aussi examiné ces questions sur Stack overflow:
Permettant aux administrateurs d'ajouter des utilisateurs à Concevoir
Comment puis-je personnaliser le contrôleur de l'enregistrement dans la Concevoir?
Ruby on Rails: la Coutume de Concevoir l'Enregistrement Contrôleur, vous Demandant De Créer une Action
Je suis nouveau sur ruby on rails depuis le 1er Mars de cette année, et qui ont pris de Mike & Nicole Clarks Rails 1 & 2 Rails de cours en ligne.
Ce que je suis en train de faire est de permettre à un utilisateur d'ajouter de nouveaux utilisateurs. Finalement, cette fonction devrait être un administrateur ou gestionnaire de l'ajout de clients. Le client doit alors être en mesure de se connecter avec les identifiants créés.
Ce qui se passe, c'est que je peux être connecté, d'ajouter un nouveau "utilisateur" par le biais de la new_user_path et la vue de l'utilisateur (par opposition à la concevoir de vue) mais quand je le présente, je suis connecté en tant que nouvel utilisateur. Les utilisateurs précédents n'est pas persistant.
Je suis en train de faire tout cela via la vue des utilisateurs & actions de contrôleur parce que je ne veux pas en réalité "s'inscrire" ou login & déconnexion avec ces actions, il suffit de créer de nouveaux enregistrements dans la table user qui serait alors en mesure de se connecter sur leur propre.
Toute aide est appréciée.
voici mon contrôleur utilisateur:
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find_by_id(params[:id])
end
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to user_url, notice: "Updated User."
else
render :edit
end
end
def create
@user = User.new(user_params)
if @user.save
redirect_to user_url, notice: "User succesfully created!"
else
render :new
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :img_file_name, :email, :password, :password_confirmation, :birthdate)
end
end
Voici mon contrôleur d'application:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:account_update) {|u|
u.permit(:first_name, :last_name, :birthdate, :img_file_name, :email, :password, :password_confirmation, :current_password)}
devise_parameter_sanitizer.for(:sign_up) {|u|
u.permit(:first_name, :last_name, :birthdate, :img_file_name, :email, :password, :password_confirmation, :current_password)}
end
end
Voici mon nouveau.html.erb fichier: (Administrateurs Seulement est juste un rappel pour moi, il n'y a pas d'admin fonction à leur moment)
<header id="content-header">
<h1>Create a New User (Admins Only)</h1>
</header>
<%= render 'form' %>
Ici est la _form.html.erb
<%= form_for(@user) do |f| %>
<%= render "shared/errors", object: @user %>
<fieldset>
<ol>
<li class="required">
<%= f.label :first_name %>
<%= f.text_field :first_name, size: 40, autofocus: true %>
</li>
<li class="required">
<%= f.label :last_name %>
<%= f.text_field :last_name, size: 40 %>
</li>
<li class="required">
<%= f.label :email %>
<%= f.email_field :email, size: 40 %>
</li>
<li class="required">
<%= f.label :password %>
<%= f.password_field :password, size: 40 %>
</li>
<li class="required">
<%= f.label :password_confirmation, "Confirm Password" %>
<%= f.password_field :password_confirmation, size: 40 %>
</li>
<li >
<%= f.label :birthdate %><br/>
<%= f.date_select :birthdate, start_year: 1915 %><br/>
</li>
<li >
<%= f.label :img_file_name %><br/>
<%= f.text_field :img_file_name %>
</li>
</ol>
<p>
<% if @user.new_record? %>
<%= f.submit "Create Account" %>
<% else %>
<%= f.submit "Update Account" %>
<% end %>
<%= link_to "Cancel", users_path, class: 'button' %>
</p>
</fieldset>
<% end %>
- Je vous suggère une interface d'administration gem tels que Rails Admin ou administration pour gérer les utilisateurs.
- Dans l'action de création ..après la sauvegarde, il suffit de vérifier que l'administrateur a créé un justificatif d'identité ou l'utilisateur a créé un justificatif d'identité .. si l'administrateur a créé un justificatif d'identité, puis de l'enregistrer et de rediriger vers chemin_admin d'autre rediriger vers user_path
- Soit u peut utiliser rails admin gem ou de créer une action dans votre contrôleur admin_only et ajouter la contrainte d'elle .. et dans votre contrôleur ajouter before_save :admin_only ...
- sp1rs, pouvez-vous préciser ce que vous entendez par la création d'un justificatif d'identité? Est-ce quelque chose que concevoir offre?
- Je vais regarder dans les Rails admin gem, mais j'aimerais comprendre pourquoi ce que je fais fonctionneront ou pas. Merci à tous.
- identification des moyens d'enregistrer les détails de l'utilisateur en db.. au Lieu d'utiliser des rails admin gem .. je préfère la création de votre propre action de l'utilisateur du contrôleur et de permettre l'accès de nouveaux , de créer de l'action à l'admin seulement .. il donnera u plus de flexibilité ..
- aha! donc, pensez-vous que dans cette ligne ici: redirect_to user_url, avis: "l'Utilisateur créé avec succès!" Je le dis d'aller de l'utilisateur je VIENS de créer? Qui pourrait être le billet! Maintenant, je comprends votre premier commentaire, et il est logique d'avoir l'admin y fonctionner. Merci.
- u bienvenue ..:)
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est en fait avec vos routes. J'imagine que vous avez ajouté
resources :users
pour votre fichier de routes à mettre en place les itinéraires pour votreUsersController
. Cependant, je suppose que vous avez aussi desdevise_for :users …
pour configurer concevoir. Cela signifie que vous aurez à concevoir et votreUsersController
de combat pour les mêmes itinéraires. Plus précisément, vous vous attendez à un POSTE à /aux utilisateurs de créer un nouvel utilisateur, mais c'est en fait le routage de concevoir la RegistrationsController et l'enregistrement d'un nouvel utilisateur et de les signer en.Vous pouvez le voir en cours d'exécution
rake routes
, et de voir que tant de concevoir et de votre UsersController ont, par exemple, les mappages pourPOST /users(.:format)
.Vous avez besoin de séparer les deux ensembles de routes. Il ya différentes façons dont vous pouvez faire cette. Vous pouvez ajouter
:path => 'u'
à votredevise_for
ligne dansroutes.rb
, qui sera alors dire votre concevoir des itinéraires sont tous/u
au lieu de/users
. Alternativement, vous pouvez garder concevoir des itinéraires sur/users
et au lieu de changer votre UsersController routes à quelque chose comme:qui
/users_admin
à votre UsersController (mais notez le chemin d'accès aides seront également modifier, par exemple, leusers_path
àusers_admin_path
).devise_for :users, controllers: {confirmations: 'confirmations'}
àdevise_for :users, :path => 'auth', controllers: {confirmations: 'confirmations'}
, et il a Juste Travaillé™. Merci, Tim!Voici ce que j'ai finalement fait pour résoudre ce
dans les itinéraires.rb
dans users_controller.rb
aucun changement
en forme.html.erb pour ajouter de nouvelles & mise à jour des utilisateurs. Note de l'URL spécifiée. Ceci est documenté à un certain degré, mais seulement le mentionne singulier ressources
http://guides.rubyonrails.org/routing.html
Mais j'ai dû séparer les modifier & de nouveaux chemins que l'url ne serait pas de travail à la fois de créer & mises à jour en même temps, donc au lieu de rendre un partiel, je viens d'avoir 2 formes. Pas sûr de ce que la solution de contournement est.
C'est mon nouveau formulaire d'utilisateur:
Et celui-ci est dans mon formulaire de modification d'un utilisateur:
Au bas du formulaire, j'ai ce code:
Puis dans le spectacle.html.erb forme j'ai eu de spécifier l'URL à partir de " rake des itinéraires de
J'ai eu les noms de chemin d'accès de râteau routes.
J'espère que cela aide quelqu'un d'autre et merci à vous tous pour l'aide. Je n'ai pas assez de réputation pour upvote toutes les réponses à ce jour.
Ce que j'ai compris de votre question(texte, de ne pas lire le code), vous souhaitez que les utilisateurs afin d'ajouter d'autres utilisateurs et les comptes doivent être prêts à être utilisés. POUR vous inscrire à l'aide de concevoir, vous seriez de l'utilisateur en utilisant
email, password and password_confirmation field as mandatory
.Lors de l'inscription des utilisateurs avec la messagerie électronique, de fournir un mannequin mot de passe pour les comptes de sorte que l'entrée utilisateur est enregistré. Envoyer des mails aux utilisateurs de confirmer leur compte et changer le mot de passe à l'aide de la réinitialisation du mot de passe de liens.
GhostRider est correcte sur le flux de travail. Vous pouvez également déplacer la logique d'un AdminsController ou similaire. Ce thread va résoudre le problème spécifique de se connecté en tant qu'utilisateur: Concevoir: Comment créer un nouvel utilisateur déjà connecté?
Mais il est un meilleur flux de travail pour avoir l'administrateur de définir un mot de passe temporaire et e-mail au nouvel utilisateur de les avoir terminer la création de leur compte.