2

Rails 4.1.2 アプリに、アプリケーション コントローラーから継承されていない API コントローラーがあります。私は Respond_to メソッドを含めようとしていて、メソッド未定義エラーを取得しようとしています....そのため、以下のように上部にアクションパックが必要でした:

require 'action_pack'

class Api::V1::UsersController < Api::ApiController
  version 1

  doorkeeper_for :all
  respond_to :json

  def show
    respond_with current_user.as_json(except: :password_digest)
  end
end

そして私はまだ得ます

ActionController::RoutingError (undefined method `respond_to' for Api::V1::UsersController:Class):

しかし、respond_to メソッドは MODULE ActionController::MimeResponds::ClassMethods の一部であり、actionpack gem ソース コードを開くと、サブディレクトリの action_pack フォルダーの下にあります。

編集:

また、Api::ApiController には親の RocketPants::Base があることにも言及する必要があります。これは、私が Rocketpants api gem を使用しているためです ... gem の作成者は、README で次のように述べています。 、他の gem との互換性を向上させる目的で、ActionController::Base で動作するように変更される場合があります。」

私は、action_pack メソッド/ライブラリ (可能であれば) にスタンドアロンでアクセスする方法に特に興味があります。

4

4 に答える 4

5

単にあなたApi::ApiController(または親がいる場合はその親)に継承させるだけですActionController::Base


RocketPants を使用していると言ってよかったです。彼らの github ページをざっと見てみると、それが既に から派生していることを確認できますActionController::Base。それは私の以前の答えを不正確にします。

したがって、呼び出す必要はないようrespond_toで、代わりにrespond_withを使用する必要がありますexposeが、それは瞬く間に推測されます。彼らのドキュメントに従うべきです

于 2014-07-22T01:26:45.423 に答える
3

rails-api gemActionController::RoutingError: undefined method 'respond_to'を使用しているときにこのエラーが発生しました。私のエラーに切り替えた後、解決しました。これにより、モデルに対応するシリアライザーで自動的にラップできない問題も修正されました。これをgemの問題として記録する場合があります。ActionController::APIActionController::Baseactive_model_serializersrender :json

于 2014-09-29T19:00:32.237 に答える