2015-08-15 4 views
0

Я пытался выяснить, как использовать current_user имя_пользователя в качестве своего URL-адреса. В настоящее время он выглядит как http://localhost:3000/users/2 вместо http://localhost:3000/users/user_name. Вся помощь приветствуется. По любым вопросам, пожалуйста, спрашивайте.friendly_id gem для current_user

User.rb

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

пользователя контроллера изменил все @user = User.friendly.find (Params [: ИД), как показано ниже. Не весь список, но вы можете видеть, что я имею в виду.

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 

Схема

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 

Если я должен добавить несколько файлов, чтобы иметь лучшее понимание, пожалуйста, дайте мне знать. Спасибо за любую помощь.

EDIT Включая 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

Вы могли бы показать 'рейк-маршруты | grep users '? –

+0

@NicolasMaloeuvre Я добавил свои «рейк-маршруты». –

+0

проверить db, сохраняется ли слизняк? Я сомневаюсь, slug is nil – mudasir

ответ

0

Обычно , Он должен работать с

user_path(current_user) 

Но более конкретно, попробуйте это,

user_path(current_user.to_param) 
+0

Спасибо Лео. Прекрасно работает. Вы были правы в user_path (current_user). Еще раз спасибо за вашу помощь. –

1

, чтобы ответить на ваш вопрос

как использовать current_user user_name в качестве URL

Форма ваши вопросы с

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

Как это ...

#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

Вы должны использовать user_path (ID: user.name) или edit_user_path (ID: user.name), например, для того, чтобы пользователь те URL