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

时间:2013-12-23 21:49:58

标签: ruby-on-rails json

我目前正在将ActiveModelSeralizer切换为JBuilder以呈现jsons。我想知道,ActiveModelSeralizer我可以做类似的事情:

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

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

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

由于

5 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

“我有一个视图部分在app / view / api / v1 / users / _user.json.jbuilder内部是否有将该部分呈现为变量?”

怎么样

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

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

答案 3 :(得分:0)

在我使用的控制器中

  

渲染json:无论

示例:

  1. items_controller.rb中(顺便说一下,我使用的是MongoDB):
  2. def show
      render json: @item
    end
    
    1. http://localhost:3000/items/他用JSON回复我: enter image description here
    2. 我没有使用任何观点

答案 4 :(得分:0)

试试这段代码:

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