Ruby on rails 在Desive中注册后,尝试自动登录并将用户重定向到特定路径时出现双重呈现错误
嗨,我这里有一个双重重定向 我一直试图实现的是自动登录用户并将用户重定向到特定路径,而不是根路径 在我的注册中\u controller.rbRuby on rails 在Desive中注册后,尝试自动登录并将用户重定向到特定路径时出现双重呈现错误,ruby-on-rails,devise,Ruby On Rails,Devise,嗨,我这里有一个双重重定向 我一直试图实现的是自动登录用户并将用户重定向到特定路径,而不是根路径 在我的注册中\u controller.rb def new @user = User.new end def create @user = User.new params[:user] @valid = @user.save if @valid sign_up end respond_to do |format| f
def new
@user = User.new
end
def create
@user = User.new params[:user]
@valid = @user.save
if @valid
sign_up
end
respond_to do |format|
format.js { render layout: false }
end
end
def sign_up
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
end
def after_sign_in_path_for(resource)
if resource.admin? or resource.super_admin?
admin_index_path
else
if mobile_device?
page_path("backgroundinfo")
else
page_path("howto")
end
end
end
def after_sign_up_path_for(resource)
page_path("howto")
end
在我的应用程序中_controller.rb
def new
@user = User.new
end
def create
@user = User.new params[:user]
@valid = @user.save
if @valid
sign_up
end
respond_to do |format|
format.js { render layout: false }
end
end
def sign_up
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
end
def after_sign_in_path_for(resource)
if resource.admin? or resource.super_admin?
admin_index_path
else
if mobile_device?
page_path("backgroundinfo")
else
page_path("howto")
end
end
end
def after_sign_up_path_for(resource)
page_path("howto")
end
任何变通办法都将受到赞赏
PS:删除respond with resource,:location=>在注册\u后\u path\u forresource仍在将用户重定向到根路径而不在页面中\u路径可能是因为控制器操作正在注册?当您尝试从同一请求中呈现两个模板时,会发生双重呈现错误 您的注册方法尝试使用respond\u with block进行响应,然后您的创建方法尝试从respond\u to block进行另一个响应。问题是:
if @valid
sign_up
end
这将调用尝试呈现响应的注册方法。之后,以下块将尝试渲染另一个模板:
respond_to do |format|
format.js { render layout: false }
end
执行路径会尝试两次渲染调用,这会导致双重渲染错误
您的代码应该如下所示:
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
# sign in user here and render response for success
format.js { #handle js }
format.html { #handle html }
else
# user was not saved
format.js { #handle error }
format.html { #handle error }
end
end
end
我也遇到了同样的问题,通过覆盖Desive::SessionController绕过了它,如下所示:
class SessionsController < Devise::SessionsController
def new
self.resource = resource_class.new(sign_in_params)
clean_up_passwords(resource)
#yield resource if block_given?
#respond_with(resource, serialize_options(resource))
# The rest of your code
# your redirect
redirect_to '/'
end
我不确定这是否有任何负面影响,但它似乎工作正常,也阻止它将用户登录数据附加到URL。如何登录用户并在注册过程后将页面重定向到页面路径?Deave有一种方法可以对用户进行登录。我从不使用Desive,因为它浪费的时间比节省的时间多,但它有一种方法可以让用户登录。应在文件中提供。看一眼。是的,方法是在资源中签名,但问题是它仍然会指向根路径,尽管我覆盖了在路径中签名后的路径。顺便说一下,谢谢你的想法。