ActionDispatch :: Request的未定义方法`flash'

时间:2013-10-25 23:25:54

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

我正在尝试在Rails 4中编写一个Ember应用程序,并决定使用rails-api来获取api控制器,同时保持应用程序控制器的完整性,这些页面不属于单个页面页面应用。换句话说,这是我的控制器:

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?

包含哪个会导致以下错误:

  对于#&lt;

未定义方法'flash' ActionDispatch :: Request:0x007f99f41d8720&gt;

根据讨论on this thread,罪魁祸首似乎可能是rails-api,但鉴于我已经建立的继承,我并不完全相信。有什么建议吗?

3 个答案:

答案 0 :(得分:33)

请参阅:https://github.com/plataformatec/devise/issues/2775

内部devise.rb更改

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

为:

config.navigational_formats = [:json]

或只是[]

答案 1 :(得分:28)

不确定但是您可能需要包含ActionDispatch::Flash中间件来支持Flash。使用:

config.middleware.use ActionDispatch::Flash

docs说:

  

ActionDispatch :: Flash:支持闪存机制   ActionController的。

我希望它有所帮助

答案 2 :(得分:28)

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

config.api_only = false