我正在进行ruby on rails项目,我想给Json添加响应。
一个简单的方法是:
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
format.json { render :json => @users.to_json }
end
end
但这也有一些问题:
1.我不想在json响应中给出整个用户对象,比如密码哈希和缓存计数器属性,facebook,twitter属性等等。
1.我想在json对象中添加更多的细节(考虑stackoverflow模型),比如每个用户最新的问题,每个用户最新的答案,而不是通过回形针存储在数据库中的图像名称,我想传递图像的完整URL。
所以问题是如何在index.json.erb文件中编写json响应,就像我们在index.html.erb中所做的那样。根据需要格式化您自己的json响应。
- 编辑**
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
format.json { render :file => "index.json.erb", :content_type => 'application/json' }
end
end
索引. json. erb文件:-
<% @users.each do |user| %>
{
first_name: <%= user.first_name %>,
last_name: <%= user.last_name %>
}
<% end %>
错误:--
模板丢失。
PS:--我只是在尝试使用创建这个文件。这只是一个示例
- 编辑**
- 编辑**
{ { first_name: Mohit , last_name: Jain } { first_name: Sahil Miglani, last_name: } { first_name: Hitesh Bansal, last_name: } { first_name: Sudhanshu, last_name: } { first_name: Saakshi, last_name: } { first_name: Kutta, last_name: } { first_name: bc, last_name: } { first_name: hey, last_name: } { first_name: fewhjfbwfb, last_name: vdsv } }
- 编辑**
[ { first_name: Mohit , last_name: Jain } , { first_name: Sahil Miglani, last_name: } , { first_name: Hitesh Bansal, last_name: } , { first_name: Sudhanshu, last_name: } , { first_name: Saakshi, last_name: } , { first_name: Kutta, last_name: } , { first_name: bc, last_name: } , { first_name: hey, last_name: } , { first_name: fewhjfbwfb, last_name: vdsv } ]
编辑,相当接近找出解决方案:-
[
<% @users.each_with_index do |user,index| %>
{
<%= "first_name".to_json.html_safe %>: <%= user.first_name.to_json.html_safe %>,
<%= "last_name".to_json.html_safe %>: <%= user.last_name.to_json.html_safe %>
}
<% unless index== @users.count - 1%>
,
<% end %>
<% end %>
]
答复:-
[
-
{
first_name: "Mohit "
last_name: "Jain"
}
-
{
first_name: "Sahil Miglani"
last_name: null
}
-
{
first_name: "Hitesh Bansal"
last_name: null
}
-
{
first_name: "Sudhanshu"
last_name: null
}
-
{
first_name: "Saakshi"
last_name: null
}
-
{
first_name: "Kutta"
last_name: null
}
-
{
first_name: "bc"
last_name: null
}
-
{
first_name: "hey"
last_name: null
}
-
{
first_name: "fewhjfbwfb"
last_name: "vdsv"
}
]
现在我所要做的就是将每个响应部分包含在用户数组中
5条答案
按热度按时间zpf6vheq1#
您可以通过在模型中实现以下代码来定制输出:
然后,在控制器中,您可以用途:
有关详细信息,请参见“Rails to_json or as_json?“。
epfja78i2#
您可以呈现一个json.erb文件,并像普通模板一样使用它:
在控制器中,使用
content_type
调用显式渲染:dtcbnfnu3#
您可以发送JSON格式的选项,用于:
:only
(属性的显式列表):except
(属性排除列表):methods
(执行并包含其内容的方法列表):include
(关系)如果您希望始终使用这种JSON输出格式,请将它们放在
as_json
方法中(参见迪文的答案):xa9qqrwz4#
查看rabl gem,自定义您的视图:
这将产生:
holgip5t5#
格式化是容易的部分,但我相信你所要求的,应该在控制器内实现,而不是在你的视图中。
请参阅http://ar.rubyonrails.org/classes/ActiveRecord/Serialization.html#M000049,了解如何更好地使用
to_json
来实际输出所需的内容,而不是序列化整个对象。