2015-02-09 116 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