繁体   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