gpt4 book ai didi

ruby-on-rails - Rails在模型中渲染json部分

转载 作者:行者123 更新时间:2023-12-04 05:58:18 24 4
gpt4 key购买 nike

在我们的 rails 3.2 应用程序中,我们使用 Jbuilder 来呈现我们的 json 响应(这里没什么特别的)。 json View 可以像这样简单:

_model_name.json.jbuilder

json.extract!(page, :id, :name, :url_name)

我们经常需要返回一个深度嵌套的 json 对象,而 Jbuilder partials 非常适合这个:

_page.json.jbuilder
json.extract!(page, :id, :name, :url_name)
json.page_images (page_images) do |json, page_image|
json.partial! page_image
end

最后一个示例将检索页面,以及嵌套的 page_images、json 表示......再次没什么特别的。

通常,单个部分会调用另一个部分,并且可能会返回 2 或 3 层深的嵌套 json 对象。

问题

就像我上面提到的,我们使用 Jbuilder partials 将多个 partials 快速链接在一起,为 View 形成一个深度嵌套的 json 对象。我们还需要将这些完全相同的嵌套对象构建为哈希(而不是 json),并使它们可用于模型。

使用 .attributes 让 Jbuilder 对象输出散列很简单!方法,但是我们在让 Jbuilder 访问模型中的 View 部分时遇到了一些严重的困难。

查看 Jbuilder 源代码,看起来 JbuilderTemplate 类需要访问 Controller 上下文才能使一切正常工作。

我们可能会尝试这样的事情:
class SomeClass

def initialize pages
@pages = pages
@context = ActionController::Base.new
end

def to_hash
builder = JbuilderTemplate.new(@context)
builder.pages(@pages) do |json, page|
json.partial! page
end
builder.attributes!
end
end

上面的例子显然是不正确的,但它说明了需要做什么。我只是不确定如何从模型传递初始化 Controller ,然后传递 Controller 上下文。

我们正在关注的一些线索:
  • how-to-render-a-view-partial-in-a-model
  • rendering-from-a-model-in-rails-3

  • 任何人都可以帮助我们指出正确的方向吗?

    最佳答案

    我很确定你在这里是在正确的 rails 上。您应该可以调用json.array!如果您直接在初始化程序中传递 block ,则正常构建部分。

    def to_hash
    builder = JbuilderTemplate.new(@context) do |json|
    json.array! @pages, partial: 'path/to/partial'
    end
    builder.attributes!
    end

    关于ruby-on-rails - Rails在模型中渲染json部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234018/

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