2015-02-09 88 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模型创建虚拟属性,并将其指定为这样 post.author = post.user.name post.author_city = post.user.city 但它只是显示json中的user_id(这是外键)

我尝试合并以及但不起作用。什么是做在轨

编辑有道:我得到了它与

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 

视图(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

CA ñ你解释你在jbuilder文件中的json.user的位置 – CodeCrack 2015-02-09 00:29:18

+0

虽然这是错误的答案...,但jbuilder的基本格式是'json.key值'。 'key'是json的关键(例如:id,name,user,...),你可以决定你想要什么。 'value'是json的值(例如:1,2,post1,post2,..),并设置值ActiveRecord对象的值。请检查https://github.com/rails/jbuilder,如果你想了解更多关于'jbuilder'的细节。 – shoji 2015-02-09 01:23:17

相关问题