Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Desive中注册后,尝试自动登录并将用户重定向到特定路径时出现双重呈现错误_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 在Desive中注册后,尝试自动登录并将用户重定向到特定路径时出现双重呈现错误

Ruby 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

嗨,我这里有一个双重重定向

我一直试图实现的是自动登录用户并将用户重定向到特定路径,而不是根路径

在我的注册中\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|
      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,因为它浪费的时间比节省的时间多,但它有一种方法可以让用户登录。应在文件中提供。看一眼。是的,方法是在资源中签名,但问题是它仍然会指向根路径,尽管我覆盖了在路径中签名后的路径。顺便说一下,谢谢你的想法。