【问题标题】:How do I build a JSON object?如何构建 JSON 对象?
【发布时间】:2012-08-30 22:12:41
【问题描述】:

目前我通过以下方式构建一个 JSON 对象:

@users = User.all

@users.each do |user|
  @userlist << {
    :id => user.id,
    :fname => user.fname,
    :lname => user.lname,
    :photo => user.profile_pic.url(:small)
  }
end

我的挑战是我现在想要包含来自@contacts 表的记录,这些记录具有与User 模型不同的字段集。

我试过了

@users = User.all
@contacts = current_user.contacts
@users << @contacts

但这没有用。将两个相似模型组合成一个 JSON 对象的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:
    json = User.all( :include => :contacts).to_json( :include => :contacts )
    

    更新

    对不起,让我对你正在做的事情给出一个更完整的答案......

    @users = User.all( :include => :contacts )
    @userlist = @users.map do |u|
      { :id => u.id, :fname => u.fname, :lname => u.lname, :photo => u.profile_pic.url(:small), :contacts => u.contacts }
    end
    
    json = @userlist.to_json
    

    另一个更新

    好的,所以忘了我吧——我今天过得很糟糕,完全没有抓住你问题的重点。您需要一些包含两组不相关数据的 JSON。所有用户,当前用户的联系人。

    你想为它创建一个新的哈希,像这样......

    @users = User.all
    @userlist = @users.map do |u|
      { :id => u.id, :fname => u.fname, :lname => u.lname, :photo => u.profile_pic.url(:small) }
    end
    
    json = { :users => @userlist, :contacts => current_user.contacts }.to_json
    

    【讨论】:

    • 谢谢,但我不知道这是做什么的。能给个小说明吗?
    • 已更新,抱歉回复过于简短。
    • 谢谢,但这不包括系统中的所有联系人吗?我在哪里可以为联系人添加条件......比如 Contact.find(:all, :select ... :conditions. ... ) ?谢谢
    【解决方案2】:
      @userlist = @users.map do |u|
        u.attributes.merge!(:contacts=>current_user.contacts)
      end
      json = @userlist.to_json
    

    【讨论】:

    • 对这个问题的答案的解释会很好。
    猜你喜欢
    • 2014-05-31
    • 2015-05-22
    • 2013-03-15
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多