合并ActiveRecord对象的最佳方法?

时间:2015-02-09 00:03:33

标签: ruby-on-rails

我有@posts属于用户。我试图渲染@posts,但也附加用户名和城市。我以为可以做一些像

这样的事情
    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(这是外键)

我也尝试合并,但这不起作用。什么是在rails中正确的方法

编辑:我让它与

一起工作
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 个答案:

答案 0 :(得分:1)

我认为最好使用jbuilder gem来创建复杂的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"}}
]
相关问题