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

#ruby-on-rails #ruby #ruby-on-rails-3

#ruby-on-rails #ruby #ruby-on-rails-3

Вопрос:

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

Ответ №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
  

Комментарии:

1. спасибо, но я не могу сказать, что это делает. Не могли бы вы дать небольшое описание?

2. Обновлено, извините за слишком краткий ответ.

3. Спасибо, но разве это не включает в себя все контакты в системе? Где я могу добавить условия для контактов… например, Contact.find(:all, :select … :условия. … ) ? спасибо

Ответ №2:

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

Комментарии:

1. Было бы неплохо объяснить, почему это является ответом на вопрос.