Rails:找不到nil的有效映射

时间:2017-05-11 15:23:05

标签: ruby-on-rails redirect devise

我经常收到这个错误。在我的应用程序控制器中,我有一个名为after_sign_in_path_for的方法,在用户使用他的帐户(Devise)登录后重定向用户。

以下是导致错误的行:

request.env['omniauth.origin'] || stored_location_for(resource) || root_url

如果之前的两个选项不起作用,那么这不应该回到root_url吗?

特别是在与Google(Omniauth)签约后,我遇到了这种情况。

1 个答案:

答案 0 :(得分:2)

如果你看一下stored_location_for(resource)的源代码,它最终会称之为魔法。 obj这里是resource,所以如果nil它会引发你遇到的错误,那么它永远不会回到root_path

def self.find_scope!(obj)
  obj = obj.devise_scope if obj.respond_to?(:devise_scope)
  case obj
  when String, Symbol
    return obj.to_sym
  when Class
    Devise.mappings.each_value { |m| return m.name if obj <= m.to }
  else
    Devise.mappings.each_value { |m| return m.name if obj.is_a?(m.to) }
  end

  raise "Could not find a valid mapping for #{obj.inspect}"
end

https://github.com/plataformatec/devise/blob/master/lib/devise/mapping.rb