我有一个属于用户的笔记类(即用户可以创建许多笔记)。
从我的音符控制器剪辑
class NotesController < ApplicationController
before_filter :authenticate_user!
respond_to :html, :xml, :json
# GET /notes
# GET /notes.xml
def index
@notes = Note.includes(:user).order("created_at DESC")
respond_with @notes
end
当我在json结果中请求索引例如/notes.json时,它返回注释但只返回用户对象的user_id。我希望它还包括user.username(并且好奇如何嵌入整个用户对象)。
奖金问题:我找不到将列显示为author_id并将其与用户关联的方法。如果这很容易做到,你怎么做?
答案 0 :(得分:42)
我不确定新的respond_to
/ respond_with
样式是否足够灵活。它很可能是,但据我所知,它只是为了简化最简单的情况。
您可以通过将参数传递给respond_to
来实现您尝试使用带有块的旧式to_json
所做的操作。尝试这样的事情:
class NotesController < ApplicationController
def index
@notes = Note.order("created_at desc")
respond_to do |format|
format.json do
render :json => @notes.to_json(:include => { :user => { :only => :username } })
end
end
end
end
答案 1 :(得分:1)
您还可以使用Jbuilder(https://github.com/rails/jbuilder)来非常灵活地响应数据。
@notes = Note.includes(:user).order("created_at DESC")
并在index.json.jbuilder文件中,您可以
json.extract! @note
json.username @note.user.username
答案 2 :(得分:-1)
是否有可能以相反的方式做到这一点?
def index
@user = User.includes(:notes).order("created_at DESC")
respond_with @user
end
每次迭代@notes
时包含用户对象都会很昂贵。