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)
我一直在努力弄清楚如何使用 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)