Rails:在视图上下文之外使用JBuilder视图

Bil*_*ill 8 json ruby-on-rails

我目前切换ActiveModelSeralizerJBuilder渲染jsons.我想知道,ActiveModelSeralizer我可以这样做:

text_content = UserSeralizer.new(user, :root => false)
Run Code Online (Sandbox Code Playgroud)

并在变量中接收json字符串text_content.既然我正在转离ActiveModelSeralizer,那么无论如何都要使用JBuilder进行上述操作吗?

我有一个部分内部的视图app/view/api/v1/users/_user.json.jbuilder是否仍然将该部分变为变量?

谢谢

Tom*_*hen 19

是的你可以.只需使用Jbuilder.encode方法:

# somewhere in User model

def display_to_json
  Jbuilder.encode do |json|
    json.name name
    json.location display_location
    json.description description
    json.work_experience work_experience
  end
end
Run Code Online (Sandbox Code Playgroud)

并使用它:

<!-- somewhere in view, just for example -->
<div ng-init="user = <%= @user.display_to_json %>"></div>
Run Code Online (Sandbox Code Playgroud)

注意:类名Jbuilder不是JBuilder.

  • 这不能回答发布的问题。它重新定义了块内的 json 表示,并且**不**使用现有的 jbuilder 模板。 (2认同)

Jak*_*ake 5

  json = ActionController::Base.new.view_context.render(partial: "api/v1/users/user", locals: {user: @user})
Run Code Online (Sandbox Code Playgroud)

  • 如果您想在部分内部使用帮助程序,您还可以使用``ApplicationController.render(partial: 'my_partial', locals: { my_obj: SomeObj })```。 (2认同)

Jos*_*yer 0

“我在 app/view/api/v1/users/_user.json.jbuilder 中有一个视图部分,有没有办法将该部分渲染到变量中?”

怎么样

json.partial! 'api/v1/users', users: @users.all
Run Code Online (Sandbox Code Playgroud)

这将渲染部分内容并创建一个新变量 users,其内容为 @users.all