Rails - 如何在索引控制器方法中使用额外字段渲染json

问题描述 投票:0回答:4

我正在使用Rails 4.0.2paperclip在我的项目中上传图片。另外,我需要发送回形针的完整图像路径。所以我可以在我的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模型以及如何将完整图像路径合并到每个记录中。

ruby-on-rails json ruby-on-rails-4
4个回答
3
投票

我找到了我的问题的解决方案,

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

0
投票

我建议你使用两种方法,1)使用主动模型序列化器来暴露json响应。 2)使用jbuilder库来公开自定义字段。你还需要帮助,请告诉我。


0
投票

试试这个:-

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

0
投票

也许你可以尝试:

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方法返回所有对象属性的哈希值,只需要将新的键值合并到返回的哈希值中。

© www.soinside.com 2019 - 2024. All rights reserved.