【问题标题】:How can I render json: in all controller actions Rails 4.2.1如何呈现 json:在所有控制器操作中 Rails 4.2.1
【发布时间】:2015-06-23 16:26:43
【问题描述】:

根据 4.2 发行说明中的​​ respond_with/respond_to 注释...Ruby Guides 和:

我想借此机会将 respond_with/class-level respond_to 拆分为一个外部插件。我通常不喜欢使用这种模式产生的代码。它鼓励使用 model#to_json,并以使代码复杂化的方式隐藏 HTML 和 API 响应之间的差异。

那么我们如何将其拆分为 4.2 的 gem,具有当前行为,但也可以通过配置点获得此处建议的新行为。 - DHH

我已经安装了 ActiveModelSerializer 0.9.3,我发现它仍然可以使用:

render json: @object

在控制器中...

我如何在应用程序控制器中默认render json:

【问题讨论】:

    标签: ruby-on-rails ruby json ruby-on-rails-4 ruby-on-rails-4.2


    【解决方案1】:

    您不需要直接从应用程序控制器渲染任何视图,而是从扩展 ApplicationController 的控制器。 如果您说 respond_with 仍在您的 rails 版本中工作,那么您只需将 respond_to :json 放入,例如:

    class MyController < ApplicationController
    respond_to :json
    
    def my_action
    ....
    respond_with(@variable)
    end
    end
    

    respond_with 将根据您的请求的 MIME 类型自动以正确的格式呈现视图。

    如果它不起作用,则将 gem 'responders', '~> 2.0' 添加到您的 gem 文件中。

    【讨论】:

    • 如果我对索引和显示操作都执行此操作,那么 activemodelserializer 会影响索引操作但不会影响显示。
    • 是的,我也必须删除 .jbuilder 文件。
    • 您是否要将删除 jbuilder 文件添加到答案中,然后我可以标记为已回答?
    • 那些文件是用来生成 json 的?当然你可以添加它们:)
    • 我正在尝试使用 ActiveModelSerializer...这实际上不起作用 - 仅适用于 jBuilder
    【解决方案2】:

    您可以修改您的routes.rb 文件以指定默认格式

    routes.rb
    
    resources :clients, defaults: {format: :json}
    

    这将修改整个 clients_controller 的默认响应格式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多