我有@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
答案 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"}}
]