2015-08-15 1 views
0

J'ai essayé de comprendre comment utiliser le current_user user_name comme leur URL. Actuellement, il ressemble à http://localhost:3000/users/2 au lieu de http://localhost:3000/users/user_name. Toute aide est appréciée. Pour toute question, s'il vous plaît demander.amical_id gem pour current_user

User.rb

class User < ActiveRecord::Base 
extend FriendlyId 
friendly_id :user_name, use: :slugged 

contrôleur utilisateur a tout changé @user = User.friendly.find (params [: id), comme indiqué ci-dessous. Pas la liste complète, mais vous pouvez voir ce que je veux dire.

class UsersController < ApplicationController 
    def index 
    @user = User.new 
    if @current_user 
    @leaders = @current_user.leaders 
    end 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
    session[:user_id] = @user.id 
    cookies[:user_id] = @user.id 
    flash[:notice] = "Welcome" 
    redirect_to "https://stackoverflow.com/users/#{ @user.id }" 
    else 
    flash[:alert] = @user.errors.full_messages 
    redirect_to "https://stackoverflow.com/users/new" 
    end 
    end 

    def new 
    @user = User.new 
    end 

    def edit 
    @user = User.friendly.find(params[:id]) 
    current_user 
    end 

    def show 
    @user = User.friendly.find(params[:id]) 
    if current_user 
    @followerlink = DateRate.where(leader_id: @user.id, 
           follow_id: current_user.id).first 
    @reverselink = DateRate.where(leader_id: current_user.id, 
           follow_id: @user.id).first 
    end 
    end 

    def update 
    @user = User.friendly.find(params[:id]) 
    if @user.update(user_params) 
    flash[:notice] = "Updated profile" 
    redirect_to "https://stackoverflow.com/users/#{ @user.id }" 
    else 
    flash[:alert] = @user.errors.full_message 
    end 
    redirect_to "https://stackoverflow.com/users/#{ @user.id }/edit" 
    end 

Schéma

create_table "users", force: true do |t| 
    t.string "user_name" 
    t.string "email" 
    t.string "password_digest" 
    t.text  "about_me" 
    t.string "slug" 
end 

add_index "users", ["slug"], name: "index_users_on_slug", unique: true 

Si j'ajouter d'autres fichiers afin d'avoir une meilleure compréhension, s'il vous plaît laissez-moi savoir. Merci pour toute aide donnée.

EDIT y compris les routes Rake

   root GET /             users#index 
        GET /users/:id/about(.:format)        users#about 
        GET /users/:id/photos(.:format)       users#photos 
        GET /users/:id/questions(.:format)       users#questions 
        GET /users/:id/date_rate(.:format)       users#date_rate 
     users_matches GET /users/matches(.:format)        users#matches 
    users_quick_match GET /users/quick_match(.:format)       users#quick_match 
        GET /users/:id/settings(.:format)       users#settings 
       users GET /users(.:format)          users#index 
        POST /users(.:format)          users#create 
      new_user GET /users/new(.:format)         users#new 
      edit_user GET /users/:id/edit(.:format)        users#edit 
       user GET /users/:id(.:format)         users#show 
        PATCH /users/:id(.:format)         users#update 
        PUT /users/:id(.:format)         users#update 
        DELETE /users/:id(.:format)         users#destroy 
+0

pourriez-vous montrer les «routes de rake | les utilisateurs de grep? –

+0

@NicolasMaloeuvre J'ai ajouté mes "routes de rake". –

+0

check in db, est-ce que slug est sauvé? Je doute, slug est nul – mudasir

Répondre

0

Normalement , Il devrait travailler avec

user_path(current_user) 

Mais plus précisément, essayer,

user_path(current_user.to_param) 
+0

Merci Leo. Fonctionne parfaitement maintenant. Vous aviez raison sur user_path (current_user). Merci encore pour votre aide. –

1

pour répondre à votre question

comment utiliser current_user user_name comme url

Formez vos requêtes avec

User.friendly.find_by_user_name(params[:user_name]). 

Comme ça ...

#config/routes.rb 
get "/users", to: "users#index" 
get "https://stackoverflow.com/users/:user_name", to: "users#show" 
get "https://stackoverflow.com/users/new", to: "users#new" 
get "https://stackoverflow.com/users/:user_name/edit", to: "users#edit" 

# construct your new form with post method for this to work 
post "https://stackoverflow.com/users/create", to: "users#create" 
# construct your edit form with post method for this to work 
post "https://stackoverflow.com/users/:user_name/update", to: "users#update" 


def index 
    @user = User.new 
    if @current_user 
    @leaders = @current_user.leaders 
    end 
end 

def new 
    @user = User.new 
end 

def create 
    @user = User.new(user_params) 
    if @user.save 
    session[:user_id] = @user.id 
    cookies[:user_id] = @user.id 
    flash[:notice] = "Welcome" 
    redirect_to "https://stackoverflow.com/users/#{ @user.user_name }" 
    else 
    flash[:alert] = @user.errors.full_messages 
    redirect_to "https://stackoverflow.com/users/new" 
    end 
end 

def edit 
    @user = User.friendly.find_by_user_name(params[:user_name]) 
    current_user 
end 

def show 
    @user = User.friendly.find_by_user_name(params[:user_name]) 
    if current_user 
    @followerlink = DateRate.where(leader_id: @user.id, follow_id: current_user.id).first 
    @reverselink = DateRate.where(leader_id: current_user.id, follow_id: @user.id).first 
    end 
end 

def update 
    @user = User.friendly.find_by_user_name(params[:user_name]) 
    if @user.update(user_params) 
    flash[:notice] = "Updated profile" 
    redirect_to "https://stackoverflow.com/users/#{ @user.user_name }" 
    else 
    flash[:alert] = @user.errors.full_message 
    end 
    redirect_to "https://stackoverflow.com/users/#{ @user.user_name }/edit" 
end 
0

Vous devez utiliser user_path (id: user.name) ou edit_user_path (id: user.name), par exemple pour l'utilisateur les URL