【问题标题】:Rails: Using JBuilder views outside of the view contextRails:在视图上下文之外使用 JBuilder 视图
【发布时间】:2013-12-23 21:49:57
【问题描述】:

我目前正在将 ActiveModelSeralizer 切换到 JBuilder 以呈现 json。我想知道,使用ActiveModelSeralizer 我可以执行以下操作:

text_content = UserSeralizer.new(user, :root => false)

并在名为text_content 的变量中接收json 字符串。既然我要从 ActiveModelSeralizer 切换,还有没有用 JBuilder 做上述事情?

我在app/view/api/v1/users/_user.json.jbuilder 内部有一个部分视图,是否可以将该部分视图呈现到变量中?

谢谢

【问题讨论】:

  • 为什么需要将 JSON 分配给 text_content?

标签: ruby-on-rails json


【解决方案1】:

是的,你可以。只需使用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

并使用它:

<!-- somewhere in view, just for example -->
<div ng-init="user = <%= @user.display_to_json %>"></div>

注意:类名是Jbuilder,而不是JBuilder

【讨论】:

  • 这不回答发布的问题。它重新定义了块内的 json 表示,并且 使用现有的 jbuilder 模板。
【解决方案2】:
  json = ActionController::Base.new.view_context.render(partial: "api/v1/users/user", locals: {user: @user})

【讨论】:

  • 如果你想在部分内部使用助手,你也可以使用ApplicationController.render(partial: 'my_partial', locals: { my_obj: SomeObj })
  • 它回答了这个问题,尽管对于一个简单的任务来说有点长线。
【解决方案3】:

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

怎么样

json.partial! 'api/v1/users', users: @users.all

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

【讨论】:

    【解决方案4】:

    在我使用的控制器中

    渲染 json:随便

    例子:

    1. items_controller.rb(顺便说一句,我使用了 MongoDB):
    def show
      render json: @item
    end
    
    1. http://localhost:3000/items/ 他用 JSON 回复我:

    我没有使用任何视图

    【讨论】:

      【解决方案5】:

      试试这个代码:

      text_content = json.(user, :id, :name, :published_at)
      

      jbuilder Railscasts

      jbuilder response as array

      对于渲染,您可以使用以下代码:

      json.partial! 'api/v1/users', users: @users.all
      

      json render for partial

      【讨论】:

        猜你喜欢
        • 2013-04-15
        • 1970-01-01
        • 2015-10-20
        • 2013-01-05
        • 2012-11-24
        • 2013-10-02
        • 2015-12-17
        • 2016-01-15
        • 2010-11-18
        相关资源
        最近更新 更多