【问题标题】:Rails 4 Devise 3.1.1 ActionController::UnknownFormat in Devise::RegistrationsController#newRails 4 Devise 3.1.1 ActionController::UnknownFormat in Devise::RegistrationsController#new
【发布时间】:2013-10-12 03:50:40
【问题描述】:

我正在开发一个使用 Devise 3.1.1 进行用户身份验证的 Rails 4 应用程序。当我点击 /users/sign_up.user 链接时,Rails 会抛出以下异常:

ActionController::UnknownFormat in Devise::RegistrationsController#new
ActionController::UnknownFormat

Rails.root: /home/rehan/odesk_work/kiefer-waight/ujoin/ujoin-www

Application Trace | Framework Trace | Full Trace
actionpack (4.0.0) lib/action_controller/metal/mime_responds.rb:372:in `retrieve_collector_from_mimes'
actionpack (4.0.0) lib/action_controller/metal/mime_responds.rb:327:in `respond_with'
devise (3.1.1) app/controllers/devise/registrations_controller.rb:8:in `new'
actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (4.0.0) lib/active_support/callbacks.rb:413:in `_run__890637270__process_action__callbacks'
....

我在启动应用程序时实际上是在 Devise 3.0.0.rc 上,我认为将设计升级到 3.1.1 可能会解决问题,但事实并非如此。在 SO/google/devise github 项目上找不到任何有用的东西。任何想法如何解决它。谢谢!

【问题讨论】:

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


    【解决方案1】:

    我不想更改 Devise 生成的默认链接,该链接在每个链接的末尾附加了“.user”。设计产生以下链接:

    new_user_registration_path(resource_name) new_user_session_path(resource_name) new_user_password_path(resource_name)

    resource_name,即用户,作为 link_to 方法中路径的参数,告诉它使用“.user”作为格式。所以我只是从每个路径中删除了 resource_name 。我想知道为什么 Devise 会这样做!

    【讨论】:

    • 我也不知道他们为什么需要resource 作为参数。在我的情况下,我删除了参数并且它起作用了。
    【解决方案2】:

    @zeeshan 的回答有效,您也可以使用不带 _user 中缀的功能:

    new_registration_path(resource_name)
    
    new_session_path(resource_name)
    
    new_password_path(resource_name)
    

    【讨论】:

      【解决方案3】:

      我也刚刚解决了这个问题。

      解决方案是将所有路径恢复为Devise默认路径,意思是说不带_user中缀。

      请注意,我们无法在控制台中测试这些代码:

      user = User.all.sample
      app.new_registration_path(user)
      

      因为 Devise 使用其helper 在内部自动转换 url,因此我们无法从外部测试。

      【讨论】:

        【解决方案4】:

        当您说您单击/users/sign_up.user 链接时,您的字面意思是确切的路径吗?因为最后的.user 告诉它尝试以user 格式响应,类似于pdfxmljson。删除它,看看会发生什么。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多