New Modifier son pseudo en tant qu'utilisateur + inscription

Par Fatavis, il y a 9 ans


Bonjour à tous et à toutes,

je m’entraîne à utiliser rails. J'ai créé un système authentification pour l'utilisateur, évidemment il peut accéder à ces informations. Mais s'il est connecté, il peut aussi les modifier. Et c'est à partir de ce moment que je connais un problème, la redirection avec le patch fonctionne bien mais il n' y a aucune modification de son pseudo. L'utilisateur a beau rentrer son nouveau pseudo, il ne se modifie pas.

Voici mon code dans le controller sessions :

class SessionsController < ApplicationController def new end def show @page = User.find(params[:id]) end def update User.find(params[:id]).update name: params[:name] redirect_to "/profil/#{current_user.id}" end def create user = User.find_by_email(params[:email]) # If the user exists AND the password entered is correct. if user && user.authenticate(params[:password]) # Save the user id inside the browser cookie. This is how we keep the user # logged in when they navigate around our website. session[:user_id] = user.id redirect_to '/' else # If user's login doesn't work, send them back to the login form. redirect_to '/login' end end def destroy session[:user_id] = nil redirect_to '/login' end end

Voici mon code dans le show:

<h1>Profil</h1>   <% if current_user && @page.id == current_user.id %> <%= form_tag "/profil/#{@page.id}", method: "patch" do %> <ul>     <li><input type="text" name="name" value="<%= current_user.name %>" /></li>     <li><%= image_tag current_user.avatar.url(:thumb) %></li>   <input type="submit" value="Enregistrer mon profil" /> </ul> <% end else  %> <%= @page.name %> <br> <%= image_tag @page.avatar.url(:thumb) %>   <% end %>

Voici ma routes :

Rails.application.routes.draw do get 'sessions/new' get 'users/new' # For details on the DSL available within this file, see <a href="http://guides.rubyonrails.org/routing.html" rel="nofollow">http://guides.rubyonrails.org/routing.html</a> get '/signup' => 'users#new' post '/users' => 'users#create' get '/login' => 'sessions#new' post '/login' => 'sessions#create' get '/logout' => 'sessions#destroy' get '/profil/:id' => 'sessions#show' patch '/profil/:id' => 'sessions#update' end

Après plein d'essais, je n'arrive toujours pas à trouver mon erreur.

Merci de m'éclairer ^^

3 réponses

Fatavis, il y a 9 ans

Merci Advancid, à priori cela fonctionne cependant je ne mets pas encore en résolu car il me reste deux trois trucs à régler pour finir le système d'authentification, et encore merci !

Fatavis, il y a 9 ans

Bonjour,
je rencontre un nouveau problème et cela fait bien quatres heures que je regarde mon code et que je ne sais pas comment le régler.
Je suis donc toujours dans mon système d'authentification mais lorsqu'un utilisateur s'inscrit, je souhaite controler les informations qu'il envoie. Par exemple, il n'a pas droit de mettre un pseudo qui existe déjà en base de donnée. Mais je n'y arrive tout simplement pas.

Voici mon new

<h1>Signup!</h1> <%= form_for :user, url: '/users' do |f| %> Name: <%= f.text_field :name %> Email: <%= f.text_field :email %> Password: <%= f.password_field :password %> Password Confirmation: <%= f.password_field :password_confirmation %> <%= f.file_field :avatar %> <%= f.submit "Submit" %> <% end %>

et mon controller

class UsersController < ApplicationController def new end def create @users = User.all @cunter_name = 0 @users.each do |user| if user.name == params[:name] @cunter_name = 1 end end if @cunter_name == 0 user = User.new(user_params) if user.save session[:user_id] = user.id flash[:success] = "Inscription réalisé avec succès" redirect_to '/login' else redirect_to '/signup' end else redirect_to '/signup' end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end end

Quand je rentre un pseudo déjà en base de donnée, il réalise quand même l'inscription. j'en déduis donc params[:name] ne vaut rien que dois-je mettre à la place ?
Ou si ma déduction est fausse comment dois-je faire ?

Merci d'avance pour vos réponses

Fatavis, il y a 9 ans

Merci et je pense que ça sera me dernère question comment puis-je afficher l'erreur à l'utilisateur ?

J'ai vu que l'on pouvait faire cela :

validates :name, presence: { message: "Vous avez oubliez d'entrer votre mot de passe ^^" }

Mais je ne sais pas comment l'exploiter dans ma page d'inscription.
Merci d'avance