大家周四快乐,我有一个关于路线和重定向的快速问题。我正在研究一个rails任务,要求我在登录后将路由器重定向到他/她的配置文件。我该怎么做呢?after_sign_in方法?以下是我的路线:
Rails.application.routes.draw do
get 'users/show'
get 'users_controller/show'
devise_for :users
resources :users
get 'welcome/index'
root :to => 'welcome#index'
end
Users控制器:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
design/sessions (Login Page)
<h2>Sign in</h2>
<div class="row">
<div class="col-md-8">
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="form-group">
<%= f.label :email %>
<%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: "Enter email" %>
</div>
<div class="form-group">
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control', placeholder: "Enter password" %>
</div>
<div class="form-group">
<% if devise_mapping.rememberable? %>
<%= f.label :remember_me, class: 'checkbox' do %>
<%= f.check_box :remember_me %> Remember me
<% end %>
<% end %>
<%= f.submit "Sign in", class: 'btn btn-success' %>
</div>
<div class="form-group">
<%= render "devise/shared/links" %>
</div>
<% end %>
</div>
</div>
谢谢你的帮助!还有谁能回答为什么我的rake路由有两个用户#show?我只知道一个函数(一个与user_id),所以我不知道如何创建两个。
Rake路由输出:
rake routes
Prefix Verb URI Pattern Controller#Action
users_show GET /users/show(.:format) users#show
users_controller_show GET /users_controller/show(.:format) users_controller#show
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
user_confirmation POST /users/confirmation(.:format) devise/confirmations#create
new_user_confirmation GET /users/confirmation/new(.:format) devise/confirmations#new
GET /users/confirmation(.:format) devise/confirmations#show
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
welcome_index GET /welcome/index(.:format) welcome#index
root GET /
welcome#index
在ApplicationController
中定义after_sign_in_path_for
。请阅读:https://github.com/plataformatec/devise/wiki/How-To%3A-Redirect-to-a-specific-page-on-successful-sign-in-and-sign-out
默认情况下,登录后将用户重定向到root_path
。您可以简单地在config/routes中更改root
设置。或者添加一个user_root_path
,例如
get '/welcome' => "welcome#index", as: :user_root
在设计wiki中描述。
关于这两条路由,请注意您的routes.rb
包含这两条语句:
get 'users/show'
resources :users
resources
自动添加一个路由在GET /users/:id
映射到UsersController#show
,这是你想要的。另一条路由应该连同get 'users_controller/show'
一起被删除。更多信息可以在Rails路由指南中找到。
在应用控制器
def after_sign_in_path_for(user)
the link that you want
end
在你的例子中
def after_sign_in_path_for(user)
user_path(current_user.id)
end