【问题标题】:Json Jbuilder v/s render :json methodJson Jbuilder v/s 渲染:json 方法
【发布时间】:2020-02-27 08:09:55
【问题描述】:

在尝试发送 json 响应时,与 jbuilder 相比,使用 render 方法可能有什么好处,反之亦然。

例如:

render :json=> @boats

v/s

在 index.json.jbuilder 中

json.array! @boats do |boat|   
    json.boat_name boat.name 
end

我尝试使用这两种方式,但找不到任何一种优于另一种的显着优势。原因可能是我的应用程序很小。所以我想知道它们在大规模应用中是否有任何区别。

【问题讨论】:

  • 来自他们的GitHub readme:“Jbuilder 为您提供了一个简单的 DSL,用于声明 JSON 结构,优于操纵巨大的哈希结构。当生成过程充满条件和循环时,这特别有用。”。在您的情况下,呈现单个资源是微不足道的。但是,如果您想呈现将多个资源混合在一起的复杂 JSON 响应,那么使用 DSL 来完成此操作会使流程更易于管理。

标签: ruby-on-rails json ruby


【解决方案1】:

Jbuilder 提供了用于生成 JSON 的 DSL。它包括一个模板引擎,允许您使用帮助程序和条件创建复杂的响应。

示例

我们可以在不使用 JBuilder 的情况下添加 render

def show
  @article = Article.find(params[:id])
   render json: @article 
end

当我们现在重新加载页面时,我们将看到文章的 JSON 表示。

{"author_id":1, title:"hello", etc}

如果你想自定义响应可以使用as_jsonlike

   format.json { render json: @article.as_json(only: [:id, :name, :content], include: [:author, {comments: {only:[:id, :name, :content]}}]) }

使用 JBuilder 这可行,但我们使用的代码不是很漂亮。我们可以在模型中覆盖 as_json ,但这不会更漂亮。

json.id @article.id
json.name @article.name

可以在 JBuilder 中使用任何自定义

感谢railscasts可以阅读更多信息

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 2013-10-06
    • 2013-01-04
    • 2014-02-18
    • 2023-03-22
    • 2012-11-24
    • 1970-01-01
    • 2011-05-14
    • 2017-08-21
    相关资源
    最近更新 更多