ruby-on-rails - 如何在 ruby​​ in rails 中创建复杂的 Json 响应

标签 ruby-on-rails ruby json ruby-on-rails-3

我正在做 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 属性等
  2. 我想在 json 对象中添加更多详细信息(考虑到 stackoverflow 模型),例如每个用户的最新问题,每个用户给出的最新答案。我想传递图像的完整 url,而不是通过回形针存储在 db 中的图像名称。

所以问题是如何在 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

index.json.erb 文件:-

    <% @users.each do |user| %>
    {
      first_name: <%= user.first_name %>,
      last_name: <%= user.last_name %>  
    }

    <% end %>

错误:--

缺少模板。

PS:-- 我只是尝试使用创建这个文件。这只是一个例子

编辑

enter image description here

编辑

 { { 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"
       }

    ]

现在我只想将每个响应部分包含在用户数组中

最佳答案

您可以通过在模型中实现代码来自定义输出:

def as_json(options={})
  super(:only => [:name, :email])
end

然后在你的 Controller 中你可以使用:

render :json => @user

有关详细信息,请参阅“Rails to_json or as_json?”。

关于ruby-on-rails - 如何在 ruby​​ in rails 中创建复杂的 Json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6345383/

相关文章:

ruby-on-rails - 使用自定义 session Controller 设计 401 返回正确登录

java - RestAssured - JsonPath 根据给定的过滤条件从对象数组中过滤匹配对象的属性

java - 如何实现AsyncTask连接服务器并解析JSON

ruby-on-rails - 如何在使用 vim 时快速访问 ruby​​ 和 rails 文档?

ruby - 由于目标机器主动拒绝,无法建立连接。 - 连接(2)

ruby - 什么时候分配一个声明为卡住的字符串(如果有的话?)

java - 使用 Jackson GWT 访问嵌套 JSON 值

ruby-on-rails - rvm 在根据默认设置重新启动后切换到旧的 ruby​​ 版本

ruby-on-rails - Ruby 安装退出并出现错误运行 'requirements_osx_port_update_system ruby-2.0.0-p247' ,

ruby-on-rails - 为什么这个赋值和每个循环只返回 1 个属性而不是我期望的整个对象?