周四大家快乐,我有一个关于路线和重定向的快速问题。我正在进行一项铁路任务,要求我在登录后将路由器重定向到他/她的个人资料。我将如何做到这一点? after_sign_in方法?这是我的路线:
Rails.application.routes.draw do
devise_for :users
resources :users
get 'welcome/index'
root :to => 'welcome#index'
end
用户控制器:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
设计/会话(登录页面)
<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>
应用程序控制器
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
def after_sign_in_path_for(resource)
user_show_path
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :name
end
end
我尝试在应用程序控制器中定义after_sign_in_path但收到此错误:未定义的局部变量或方法`user_show_path&#39;
答案 0 :(得分:2)
您需要调用的网址助手为user_path(resource)
,而不是user_show_path
。 (Devise会将当前用户作为您的资源。)
查看Rails guide on routing,了解在路线中使用resources
时生成的帮助程序的详细信息。