簡體   English   中英

current_user的friendly_id gem

[英]friendly_id gem for current_user

我一直在嘗試找出如何使用current_user user_name作為其URL。 當前看起來像http:// localhost:3000 / users / 2而不是http:// localhost:3000 / users / user_name 感謝所有幫助。 如有任何疑問,請詢問。

User.rb

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

用戶控制器將所有@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

回答你的問題

如何使用current_user用戶名作為其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)來使用這些網址

通常,它應該與

user_path(current_user)

但更具體地說,嘗試一下

user_path(current_user.to_param)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM