friendly_id gem 对于 current_user

friendly_id gem for current_user

我一直在努力弄清楚如何使用 current_user user_name 作为他们的 url。目前它看起来像 http://localhost:3000/users/2 instead of http://localhost:3000/users/user_name。感谢所有帮助。如有任何问题,请提问。

User.rb

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

User Controller 更改了所有@user = User.friendly.find(params[:id) 如下所示。不是整个列表,但你可以明白我的意思。

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 "/users/#{ @user.id }"
   else
    flash[:alert] = @user.errors.full_messages
    redirect_to "/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 "/users/#{ @user.id }"
   else
    flash[:alert] = @user.errors.full_message
   end
   redirect_to "/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

如果我要添加更多文件以便更好地理解,请告诉我。感谢您提供的任何帮助。

编辑 包括佣金路线

               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

回答你的问题

how to use the current_user user_name as their url

使用

形成您的查询
User.friendly.find_by_user_name(params[:user_name]). 

像这样...

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

# construct your new form with post method for this to work
post "/users/create", to: "users#create"
# construct your edit form with post method for this to work
post "/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 "/users/#{ @user.user_name }"
  else
    flash[:alert] = @user.errors.full_messages
    redirect_to "/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 "/users/#{ @user.user_name }"
  else
    flash[:alert] = @user.errors.full_message
  end
  redirect_to "/users/#{ @user.user_name }/edit"
end

您应该使用 user_path(id:user.name) 或 edit_user_path(id:user.name) 来使用 url

通常,它应该与

一起使用
user_path(current_user)

但更具体地说,试试这个,

user_path(current_user.to_param)