2015-02-09 3 views
0

У меня есть @posts, которые принадлежат пользователю. Я пытаюсь отображать @posts, но также добавлять имя и город пользователям. Я думал, что это можно было бы сделать что-то вродеЛучший способ объединить объекты ActiveRecords?

respond_to do |format|                                  

     format.json {                                   
      @post_arr = Array.new                                
      @posts.each do |post|                                
      @post_arr[post.id] = post + post.user.name + post.user.city                      
      end                                     
      render json: @post_arr                                
     }                                      
    end   

Я получаю неопределенный метод `+» для #

Я также попытался создать виртуальные атрибуты в пост-модели и назначить его в качестве такого post.author = post.user.name post.author_city = post.user.city , но это только показывает user_id в формате JSON (который является внешним ключом)

Я стараюсь слиться как хорошо, но это не работает. Что бы правильный способ сделать это в рельсах

EDIT: Я получил его на работу с

format.json {                                   
      @post_arr = Array.new                                
      @posts.each do |post|                                
      @post_arr << post.as_json.merge!({:author_name => post.user.name, :author_city => post.user.city})             
      end                                     
      render json: @post_arr                                
     }                                      
    end   

ответ

1

Я думаю, что лучше использовать jbuilder драгоценный камень, который является для создания сложного ответа JSon.

Вы делаете ниже, если вы хотите использовать jbuilder

контроллер

class PostsController < ApplicationController  
    def action_name 
    responde_to do |format| 
     format.json # => render app/views/posts/action_name.json.jbuilder 
    end 
    end 
end 

View (app/views/posts/action_name.json.jbuilder)

json.array!(@posts) do |post| 
    json.extract! post, :id, :name # response post's id and name as same key 
    json.user do 
    json.name post.user.name # response post.user.name as name 
    json.city post.user.city # response post.user.city as city 
    end 
end 

И ответ

[ 
    {"id":1,"name":"post1","user":{"name":"user1","city":"city1"}}, 
    {"id":2,"name":"post2","user":{"name":"user1","city":"city1"}} 
] 
+0

ча n вы объясните, где вы получили json.user в файле jbuilder – CodeCrack

+0

Хотя это неправильный ответ ..., базовый формат jbuilder - это 'json.key value'. 'key' является ключом json (например: id, name, user, ...), и вы можете решить, что хотите. 'value' - значение json (ex: 1, 2, post1, post2, ..), и вы задаете значение объекта ActiveRecord. Просьба проверить https://github.com/rails/jbuilder, если вы хотите узнать больше о 'jbuilder'. – shoji

Смежные вопросы