如何在Rails 4中不从ApplicationControllerinheritance时包含respond_to?

我在Rails 4.1.2应用程序中有一个API控制器,它不从Application控制器inheritance。 我正在尝试包含respond_to方法并获取方法未定义错误….所以我需要在顶部的actionpack如下:

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,因为我正在使用火箭pigem……gem的作者在他的自述文件中说:“RocketPants只包括最低限度的apis。在不久的将来,它可以被修改为与ActionController :: Base一起使用,以便更好地与其他gem兼容。“

我特别感兴趣的是如何以独立的方式访问action_pack方法/库(如果可能的话),就像你包含activesupport一样。

还要检查您的rails版本。 在Rails 4.2及更高版本中,respond_to语法已被移动到responders gem中 。

的Gemfile:

 gem 'responders' 

安慰:

 bundle install rails g responders:install 

简单地让您的Api::ApiController (或其父级,如果有的话)inheritance自ActionController::Base


你提到的好东西是使用RocketPants! 快速浏览一下他们的github页面,确认它已经从ActionController::Base派生出来。 这使我以前的答案不正确。

因此,您似乎不需要调用respond_to而不是respond_with而是应该使用expose ,但这是一个眨眼的猜测。 你应该按照他们的文件

我在使用rails-api gem时看到了这个错误ActionController::RoutingError: undefined method 'respond_to' 。 在将ActionController::API切换到ActionController::Base我的错误得到了解决。 这也修复了active_model_serializers无法自动包装render :json自动与相应的序列化器到我的模型。 我可能会将此记录为gem的问题。

您必须包含(至少)ActionController :: RespondWith模块。