Devise中的UnknownFormat :: SessionsController #new

时间:2013-12-18 13:47:20

标签: ruby-on-rails devise

我有一个Rails 4应用程序(从Rails 3升级),我决定删除其中一个控制器。然后我将方法从已删除的控制器移动到ApplicationController,其中包括before_filter :authenticate_user!

以下是我的ApplicationController现在的样子:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :authenticate_user!
  respond_to :json

  def index
    gon.rabl

    @user = current_user
    gon.rabl "app/views/users/show.json.rabl", as: "current_user"
  end

  def markdown
    require 'redcarpet'
    renderer = Redcarpet::Render::HTML.new
    extensions = {}
    Redcarpet::Markdown.new(renderer, extensions)
  end

  helper_method :markdown

end

现在,我收到了这个错误:

ActionController::UnknownFormat in Devise::SessionsController#new

3 个答案:

答案 0 :(得分:5)

我认为这可能是因为您已将应用程序控制器设置为仅响应json。如果您的Devise Controller继承自ApplicationController(我认为这是默认设置),那么它将期望看到内容类型:json标头,或者您的网址必须全部以.json结尾

答案 1 :(得分:1)

您不应该在application_controller中定义索引方法。您应该将其移动到适当的控制器。如果您想在每次操作之前执行此操作,可能需要尝试以下操作:

before_action :gon_user, only: :index
private
def gon_user
  gon.rabl

  @user = current_user
  gon.rabl "app/views/users/show.json.rabl", as: "current_user"
end

虽然我要说实话,我不确定gon的东西,但不记得是否将数据从ruby移动到javascript或响应ajax / json请求。

答案 2 :(得分:0)

谢谢切片盘。让我想到了

respond_to :json

在我的Rails应用程序中用作Angular的API。就像我的Rails控制器一样,我用于Angular Services的请求。

respond_with

在我的情况下,我最终将HTML添加到respond_to:

respond_to :json, :html

默认的Mime类型可以在这里看到: http://apidock.com/rails/Mime