#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. Было бы неплохо объяснить, почему это является ответом на вопрос.