我在Rails 4.1.2应用程序中有一个API控制器,它不是从应用程序控制器继承的。我尝试包含respond_to方法,并获得一个未定义的方法error....So,然后我需要在顶部使用操作包,如下所示:
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方法是模块ActionController::MimeResponds::ClassMethods的一部分,如果我打开actionpack gem源代码,可以在子目录的action_pack文件夹下找到它。
编辑:
我还应该提到Api::ApiController有一个父RocketPants::Base,因为我使用的是rocketpants api gem……gem的作者在他的自述文件中写道:"RocketPants只包含了最低限度的apis。在不久的将来,为了更好地与其他gem兼容,它可能会被修改为与ActionController::Base协同工作。“
我特别感兴趣的是如何以独立的方式访问action_pack方法/库(如果可能的话),就像您在包含activesupport时可以做到的那样。
发布于 2014-07-22 09:26:45
只需使您的Api::ApiController (或其父对象,如果有)继承自ActionController::Base
幸好你提到你正在使用RocketPants!快速浏览一下他们的github页面就可以确认它已经是从ActionController::Base派生出来的。这使得我之前的答案是不正确的。
所以看起来你不需要调用respond_to,而不是respond_with,你应该使用expose,但这只是一个猜测。您应该遵循他们的文档
发布于 2015-09-06 00:44:31
还要检查您的rails版本。在Rails4.2和更高版本中,respond_to语法已经移到了responders gem中。
Gemfile:
gem 'responders'控制台:
bundle install
rails g responders:install发布于 2014-09-30 03:00:32
当我使用rails-api gem时,我看到了这个错误ActionController::RoutingError: undefined method 'respond_to'。在将ActionController::API切换到ActionController::Base之后,我的错误得到了解决。这也修复了active_model_serializers无法使用对应的序列化程序自动包装render :json到我的模型中的问题。我可能会将此记录为gem的一个问题。
https://stackoverflow.com/questions/24877075
复制相似问题