添加字段以设计注册视图后,“无法重定向到nil”错误

时间:2011-11-22 22:23:28

标签: ruby-on-rails devise ruby-on-rails-3.1

将此行添加到devise / registrations / new.html.haml文件(视图)后:

  %div
    = f.label :account_type
    %br/
    = f.select(:account_type, [["Usertype1","usertype1"],["Usertype2","usertype2"]], {:selected => nil, :prompt => 'Pick One'})

点击确认电子邮件中的确认链接后,我收到以下错误:

ActionController::ActionControllerError in Devise::ConfirmationsController#show

Cannot redirect to nil!

只有在注册时选择Usertype2才会发生。我还将account_type设为attr_accessible。 account_type似乎已分配(我在rails控制台中检查过),开发日志没有任何进一步的信息。

我认为这是发生错误的设计确认控制器中的一行:

respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }

此外,帐户正在确认,但在尝试登录时,我会收到以下信息:

undefined method `user_url' for #<Devise::SessionsController:0x9d1659c>

位于设计会话控制器的创建操作中。

任何帮助将不胜感激。谢谢!

约翰

1 个答案:

答案 0 :(得分:5)

您提到的两个错误是同一个,基本上当您成功登录时,Devise无法检测到您重定向的位置。当您有多个模型或尝试在路径文件中设置自定义重定向(登录后)时,通常会发生此问题。

尝试在ApplicationController中定义路径。

设计文档说post_sign_in_path_for方法采用实际的模型对象(即:正在登录的模型)

def after_sign_in_path_for(resource)
    signed_in_path_for_user
end

注意:您可以对多个Devise路径/变量执行相同操作(覆盖它们)。另外,有关在同一个应用程序中为多个Devise模型执行此操作的更多信息,您可以查看this question并回答它。