gpt4 book ai didi

ruby-on-rails - 如何为 ApplicationController 中的 after_action 过滤器中的所有操作呈现 json?

转载 作者:行者123 更新时间:2023-12-04 00:34:59 26 4
gpt4 key购买 nike

是否可以在 Rails ApplicationController 中创建一个 after_filter 方法来运行每个操作并呈现为 JSON?我正在构建一个 API,我想为 Controller 中的每个操作将输出呈现为 JSON。

clients_controller.rb

def index
@response = Client.all
end

application_controller.rb

...
after_action :render_json
def render_json
render json: @response
end

after_action 永远不会执行,代码中止:

Template is missing. Missing template clients/index, ...

如果 render json: @response 被移动到 Controller 操作中,它会正常工作。

是否有一个过滤器可以让我干燥 Controller 并将渲染调用移至基本 Controller ?

最佳答案

您不能渲染 after_action/after_filter。回调 after_action 用于在渲染之后 执行操作。所以在 after_action 中渲染为时已晚。
但是你的异常(exception)只是因为你错过了 JSON 模板。我建议使用 RABL (它为您的 JSON 响应提供了很大的灵 active ,并且还有一个关于它的 Railscast)。然后你的 Controller 看起来像:

class ClientsController < ApplicationController
def index
@clients = Client.all
end
def show
@client = Client.find params[:id]
end
end

并且不要忘记创建您的 rabl 模板。
例如客户/index.rabl:

collection @clients, :object_root => false

attributes :id
node(:fancy_client_name) { |attribute| attribute.client_method_generating_a_fancy_name }

但如果您仍然想要更具声明性,您可以利用 ActionController::MimeResponds.respond_to喜欢:

class ClientsController < ApplicationController
respond_to :json, :html
def index
@clients = Client.all
respond_with(@clients)
end
def show
@client = Client.find params[:id]
respond_with(@client)
end
end

顺便说一句。请注意,如果您将代码放在 after_action 中,这会延迟整个请求。

关于ruby-on-rails - 如何为 ApplicationController 中的 after_action 过滤器中的所有操作呈现 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25628487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com