1

嗨,我在这里得到了双重重定向

我一直在尝试完成的是自动登录用户并将用户重定向到特定路径,而不是根路径。

在我的registrations_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

在我的 application_controller.rb

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 => after_sign_up_path_for(resource)仍然会将用户重定向到root_path不在page_path可能是因为控制器操作正在注册中?

4

2 回答 2

0

当您尝试从同一个请求渲染两个模板时,会发生双重渲染错误。

您的sign_up方法尝试使用respond_with块响应,然后您的方法尝试从块create中做出另一个响应。respond_to这是问题:

if @valid
  sign_up
end

这会调用您sign_up尝试呈现响应的方法。在此之后,以下块尝试呈现另一个模板:

respond_to do |format|
  format.js { render layout: false }
end

您的执行路径render会尝试两次调用,这会给您带来双重渲染错误。

您的代码应该类似于以下内容:

  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
于 2013-09-19T14:58:19.483 回答
0

我有同样的问题,并通过覆盖 Devise::SessionsController 绕过它,如下所示:

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。

于 2015-01-22T06:19:02.943 回答