【问题标题】:How to render a collection in jbuilder?如何在 jbuilder 中呈现集合?
【发布时间】:2016-07-30 16:32:01
【问题描述】:

Rails 中有一个很棒的方法可以为视图模板渲染一组对象,它可以作为伙伴使用:

<%= render @restaurants %>

它会自动查找名为 _restaurant.html.erb 的部分,循环遍历集合,将单个对象传递给部分,然后渲染它。这真是太棒了。

现在,我正在jbuilder gem 中寻找一种非常相似的方式。

_restaurant.json.jbuilder

json.(restaurant, :id, :name, :address, :latitude, :longitude)

现在,对于@restaurants,我将如何以与在 Rails 中用于视图模板的相同方式使用此部分?目前,我正在通过以下方式呈现集合:

json.restaurants @restaurants do |restaurant|
  json.partial! restaurant
end

【问题讨论】:

  • 看看 DHH 的 comment :p
  • 不过json.partial! "restaurant", :collection =&gt; @restaurants也不错。
  • @ArupRakshit 发表您的第二条评论作为答案。

标签: ruby-on-rails json view jbuilder


【解决方案1】:

好的,所以我认为您正在寻找以下内容:

json.partial! :restaurant, collection: @restaurants

【讨论】:

  • 我想知道这怎么可能是一个正确的答案?它只渲染一家餐厅,不是吗?
  • 我同意。这不是一个正确的答案,因为这样只会渲染一家餐厅。
  • @Repolês @kangkyu 不,它不会只渲染一个,看看collection: 是如何工作的。
  • 嘿,@ArupRakshit。它对我不起作用,真的。 Rails 日志确实显示“...的渲染集合”,但生成的 JSON 仅包含集合的第一项。这很奇怪,我不知道这是我的 Rails 版本的错误还是我做错了什么。使用json.array!时只能输出集合。
【解决方案2】:

我能找到的最短的:

json.restaurants @restaurants, partial: 'restaurants/restaurant', as: :restaurant

...但并不像渲染视图部分的集合(在日志中它仍然显示为多个渲染),我不喜欢在一行代码中使用 5 次“餐厅”这个词

【讨论】:

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