我有一个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
答案 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