Rails - 如何在索引控制器方法中使用额外字段渲染json
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails - 如何在索引控制器方法中使用额外字段渲染json相关的知识,希望对你有一定的参考价值。
我正在使用Rails 4.0.2
和paperclip
在我的项目中上传图片。另外,我需要发送回形针的完整图像路径。所以我可以在我的show
控制器方法中手动添加新字段并设置图像路径以获取特定记录。
节目
def show
respond_to do |format|
format.html
format.json { :json => JSON::parse(@demo.to_json.merge("new_field" => @demo.image_url.url).to_json}
end
end
当我查看Json的任何记录时,这将显示出良好的效果。
{
id: "1",
name: "demo",
new_field: "/demo/1/original/file.jpg"
}
在同一场景中,当我在index
上请求controller
方法时,我需要获取所有记录的回形针图像的完整图像路径
指数
def index
@demos = Demo.all
respond_to do |format|
format.html
format.json { :json => Demo.all.to_json}
end
end
我尝试了一些代码,但我不知道怎么写
def index
@demos = Demo.all
@demos.each do |demo|
new_field = {"new_field" => @demo.image_url.url}
# After I stucked with logic, how to uppend with 'demo'.
end
respond_to do |format|
format.html
format.json { :json => Demo.all.to_json}
end
end
如何迭代我的个人Demo
模型以及如何将完整图像路径合并到每个记录中。
答案
我找到了我的问题的解决方案,
def index
@demos = Demo.all
@demos_data = []
@demos.each do |demo|
new_field = {"new_field" => @demo.new_field.url}
demo = JSON::parse(demo.to_json).merge(new_field)
@demos_data << demo
end
respond_to do |format|
format.html
format.json { :json => @demos_data}
end
end
另一答案
我建议你使用两种方法,1)使用主动模型序列化器来暴露json响应。 2)使用jbuilder库来公开自定义字段。你还需要帮助,请告诉我。
另一答案
试试这个:-
def index
@demos = Demo.all
@demos_data = []
@demos.each do |demo|
demo["new_field"] = @demo.image_url.url
@demos_data << demo
end
respond_to do |format|
format.html
format.json { :json => @demos_data}
end
end
另一答案
也许你可以尝试:
def index
@demos = Demo.all
@demos.map do |demo|
new_field = {"new_field" => @demo.image_url.url}
demo.attributes.merge(new_field)
end
respond_to do |format|
format.html
format.json { :json => @demos}
end
end
attributes
方法返回所有对象属性的哈希值,只需要将新的键值合并到返回的哈希值中。
以上是关于Rails - 如何在索引控制器方法中使用额外字段渲染json的主要内容,如果未能解决你的问题,请参考以下文章