【问题标题】:ActionController::UnknownFormat in Devise::RegistrationsController#new. ".user" appended in URLDevise::RegistrationsController#new 中的 ActionController::UnknownFormat。附加在 URL 中的“.user”
【发布时间】:2016-03-25 18:40:00
【问题描述】:

我以前使用过 devise,但我不明白这次我做错了什么。所有相关的问题也没有解释它。一旦我点击注册链接,我就会收到如下错误

ActionController::UnknownFormat in Devise::RegistrationsController#new

在第 207 行

(options.delete(:responder) || self.class.responder).call(self, resources, options)
  else
207: raise ActionController::UnknownFormat
  end
end

但是,如果我从

更改我的链接
  <%= link_to "Sign up", new_user_registration_path(resource_name) %>

  <%= link_to "Sign up", new_user_registration_path %>

注册页面加载正常。另一件需要注意的是,当我点击注册链接时,我的网址看起来像 http://localhost:3000/users/sign_up.user 而不是 http://localhost:3000/users/sign_up 应该是这种情况。

我参考了Rails 4 Devise 3.1.1 ActionController::UnknownFormat in Devise::RegistrationsController#new 并找到了删除资源名称的想法,它似乎有效。但是,我不明白为什么。提前致谢

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    当您将资源传递给路径方法(例如new_user_registration_path)时,Rails 将尝试路由到该资源的操作并将其插入到路由中。由于您没有为它定义的资源匹配器的路由,Rails 只会将 .&lt;resource.to_param&gt; 附加到 URL 的末尾。显然这不是你想要的,因为注册不需要占用资源。

    您收到此特定异常的原因是因为 devise 试图响应多种响应类型(html、json、xml 等),它将 .user 解析为您希望接收的类型,因此出现未知格式错误.

    【讨论】:

    • 我不明白。我的 new_user_registration_path 指向 registration/new 那么为什么它与路径不匹配。
    • 确实如此,但尝试响应不存在的.user 响应格式。 resource_name.to_paramuser,这就是它被附加到 URL 的原因
    • ok.. 有点道理,但我如何确保它不使用 resource_name.to_param?很抱歉问了这么愚蠢的问题,但请多多包涵,我是 Rails 的新手
    • 以后不要将任何参数传递给new_user_registration_path 方法。
    • 是的,我认为删除参数可以解决问题。现在我也明白为什么了。谢谢你:)
    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2015-10-28
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多