首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在Rails 4中没有继承自respond_to,该如何包含ApplicationController呢?

如果在Rails 4中没有继承自respond_to,该如何包含ApplicationController呢?
EN

Stack Overflow用户
提问于 2014-07-22 08:36:30
回答 4查看 4.5K关注 0票数 2

我在Rails 4.1.2应用程序中有一个API控制器,它不是从应用程序控制器继承的。我尝试包含respond_to方法,并获得一个未定义的方法error....So,然后我需要在顶部使用操作包,如下所示:

代码语言:javascript
复制
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

我仍然会得到

代码语言:javascript
复制
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时可以做到的那样。

EN

回答 4

Stack Overflow用户

发布于 2014-07-22 09:26:45

只需使您的Api::ApiController (或其父对象,如果有)继承自ActionController::Base

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

所以看起来你不需要调用respond_to,而不是respond_with,你应该使用expose,但这只是一个猜测。您应该遵循他们的文档

票数 5
EN

Stack Overflow用户

发布于 2015-09-06 00:44:31

还要检查您的rails版本。在Rails4.2和更高版本中,respond_to语法已经移到了responders gem中。

Gemfile:

代码语言:javascript
复制
gem 'responders'

控制台:

代码语言:javascript
复制
bundle install
rails g responders:install
票数 5
EN

Stack Overflow用户

发布于 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的一个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24877075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档