web-dev-qa-db-fra.com

Comment créer un objet JSON?

Actuellement, je crée un objet JSON en faisant:

@users = User.all

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

Mon défi est que je souhaite maintenant inclure les enregistrements du @contacts table qui a un ensemble de champs différent du modèle User.

J'ai essayé de faire

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

Mais ça n'a pas marché. Quelle est la meilleure façon de combiner deux modèles similaires en un seul objet JSON?

21
AnApprentice
json = User.all( :include => :contacts).to_json( :include => :contacts )

Mettre à jour

Désolé, permettez-moi de donner une réponse plus complète pour ce que vous faites ...

@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

Une autre mise à jour

Ok, alors oubliez-moi - je passais une mauvaise journée et j'ai complètement raté le point de votre question. Vous voulez du JSON qui inclut deux ensembles de données non liés. Tous les utilisateurs, et les contacts uniquement pour l'utilisateur actuel.

Vous voulez créer un nouveau hachage pour cela alors, quelque chose comme ça ...

@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
49
smathy
  @userlist = @users.map do |u|
    u.attributes.merge!(:contacts=>current_user.contacts)
  end
  json = @userlist.to_json
5
user1008580