我目前正在将ActiveModelSeralizer
切换为JBuilder
以呈现jsons。我想知道,ActiveModelSeralizer
我可以做类似的事情:
text_content = UserSeralizer.new(user, :root => false)
接收名为text_content
的变量中的json字符串。既然我正在转离ActiveModelSeralizer,那么无论如何都要使用JBuilder进行上述操作吗?
我在app/view/api/v1/users/_user.json.jbuilder
内部有一个部分视图是否有将该部分呈现为变量?
由于
答案 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:无论
示例:
items_controller.rb
中(顺便说一下,我使用的是MongoDB):def show render json: @item end
http://localhost:3000/items/
他用JSON回复我:
我没有使用任何观点
答案 4 :(得分:0)
试试这段代码:
text_content = json.(user, :id, :name, :published_at)
对于渲染,您可以使用以下代码:
json.partial! 'api/v1/users', users: @users.all