web-dev-qa-db-ja.com

ActionDispatch :: Requestの未定義のメソッド `flash '

私はEmberアプリケーションをRails 4で記述し、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?

これを含めると、次のエラーが発生します。

#<ActionDispatch :: Request:0x007f99f41d8720>の未定義のメソッド 'flash'

ディスカッションごと このスレッド上 、原因はRails-api、しかし、私が設定した継承を考えると、私は完全には確信していません。助言がありますか?

22
Jonathan Bender

確かではありませんが、フラッシュをサポートするためにActionDispatch::Flashミドルウェアを含める必要があるかもしれません。使用:

config.middleware.use ActionDispatch::Flash

docs は言う:

ActionDispatch :: Flash:ActionControllerのフラッシュメカニズムをサポートします。

それが役に立てば幸い

31
Marcio Junior

参照: https://github.com/plataformatec/devise/issues/2775

Devise.rbの内部変更

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

に:

config.navigational_formats = [:json]

あるいは単に [ ]

33
cbron

私と同じように既存のアプリケーションの上にAPIを作成する場合は、これをconfig/application.rbファイルに追加できます。

config.api_only = false

28
Chuck Callebs