Подтвердить что ты не робот

Как создать объект JSON?

В настоящее время я создаю объект 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?

4b9b3361

Ответ 1

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

Update

Извините, позвольте мне дать более полный ответ за то, что вы делаете...

@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

Ответ 2

  @userlist = @users.map do |u|
    u.attributes.merge!(:contacts=>current_user.contacts)
  end
  json = @userlist.to_json