在没有模型对象 Rails 4 中覆盖渲染:json
Posted
技术标签:
【中文标题】在没有模型对象 Rails 4 中覆盖渲染:json【英文标题】:Override render :json in no model object Rails 4 【发布时间】:2013-11-28 14:36:59 【问题描述】:我需要覆盖“render json”,但我不需要为模型覆盖它,在模型中我知道我可以打开 ActiveRecord::Base 并覆盖 as_json 方法。但我的问题是当我有这样的事情时
class TestController < ApplicationController
def index
render json: field: 'is a test'
end
end
我的问题是因为我使用了一个 gem,其中一些方法我需要返回“render json”,而这个 gem 没有为此集中的方法。我认为在 gem 的分支中并重构它,因为我可以覆盖集中式方法,但首先我想知道是否可以覆盖渲染。
【问题讨论】:
这里有实际问题吗?该代码很好。 请指定宝石。那是主动模型序列化器吗? 问题是我希望“render json”不返回 field: 'is a test' 我想要我的自定义 json 格式示例 status: 'ok', response: field: '是一个测试' . 我的问题是宝石 Opro 和响应 /oauth/token 或其他什么 不能直接用 status: 'ok', response: field: 'is a test'
吗?
【参考方案1】:
您可以在那里打开 ActionController::Base 类并覆盖渲染方法。但是我不确定这是否是最好的主意,这取决于您遇到的实际问题,并且您没有向我们提供有关问题的太多细节,即您期望得到什么以及您实际得到什么。
更新
我可能会喜欢这样的东西:
class ActionController::Base
def render *args
options = args.extract_options!
if options[:json]
\\ do whatever you need here
end
args << options
super *args
end
end
【讨论】:
好吧,我告诉你。我有一个 api 我的正常 api 响应是: status:'ok', response: field:'is a example' 我想为我的 api 实现 oauth,然后我看到了 gem Opro(github.com/opro/opro)但在这个 gem 中,控制器响应:field:'is a example' 我有一个继承“ActionController::Base”的 ApiController,它有两种正确准备响应的方法。然后在我的 api 控制器中,当渲染 json 调用我的方法并使用我的格式正常工作,但是opro 的控制器只是像 rails 默认一样渲染 json。 那我的问题是,我可以用我的格式覆盖opro的控制器渲染json的rails渲染json响应吗? 我想不出有什么理由你不能。这是红宝石——我们可以做我们需要的一切。如果问题出在您的 API 控制器上,您可以在那里覆盖它,但我知道您想改进 gem 本身。如果是这样,您将需要覆盖模块 gem 中的 render 用于增强控制器(显然)。然而,由于原始渲染方法相当复杂,我可能会尝试尽可能多地重用原始版本。也许像我添加的代码来回答? 谢谢!!我为我工作!我在覆盖 gem 控制器中应用了您的代码,它的工作!谢谢!!以上是关于在没有模型对象 Rails 4 中覆盖渲染:json的主要内容,如果未能解决你的问题,请参考以下文章