29

我正在尝试在 Rails 4 中编写 Ember 应用程序,并决定使用rails-apiapi 控制器,同时在不属于单页应用程序的几个页面上保持应用程序控制器完好无损。更具体地说,这里是我的控制器:

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery
end

app/controllers/sample_controller.rb

class SampleController < ApplicationController
  # my methods
end

app/controllers/api/v1/api_controller.rb

class Api::V1::ApiController < ActionController::Api
  include ActionController::MimeResponds
end

app/controllers/api/v1/sample_controller.rb

module Api::V1
  class SampleController < ApiController
    respond_to :json

    # my methods

  end
end

我的application.html.slim包含以下行:

== render partial: "flash_msgs" unless flash.blank?

包含 which 会导致以下错误:

#< ActionDispatch::Request:0x007f99f41d8720 > 的未定义方法“flash”>

根据关于这个线程的讨论,罪魁祸首似乎是rails-api,但考虑到我设置的继承,我并不完全相信。有什么建议么?

4

4 回答 4

44

不确定,但也许您需要包含ActionDispatch::Flash中间件来支持闪存。使用:

config.middleware.use ActionDispatch::Flash

文档说:

ActionDispatch::Flash:支持 ActionController 中的 flash 机制。

我希望它有帮助

于 2013-10-26T00:04:46.933 回答
34

见:https ://github.com/plataformatec/devise/issues/2775

内部 devise.rb 更改

config.navigational_formats = ['*/*', :html]

至:

config.navigational_formats = [:json]

要不就 [ ]

于 2014-01-15T22:32:42.577 回答
32

如果您像我一样在现有应用程序之上创建 API,您可以将其添加到您的 config/application.rb 文件中:

config.api_only = false

于 2014-04-14T06:23:06.960 回答
0

好吧,就我而言,我的 API 模式 rails 应用程序在我的一个控制器中有此代码:

protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }

由于调用了handle_unverified_request,因此有一小段代码对我来说request.flash = nil很重要。Undefined method 'flash' for ActionDispatch::Request

通过替换protect_from_forgery来处理它skip_before_action :verify_authenticity_token

于 2021-08-13T12:05:19.413 回答