ユーザーに属するメモクラスがあります(つまり、ユーザーは多くのメモを作成できます)。
ノートコントローラーからのクリップ
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
/notes.jsonなどのjson結果でインデックスを要求すると、メモが返されますが、ユーザーオブジェクトのuser_idのみが返されます。 user.usernameも含めたいと思います(そして、ユーザーオブジェクト全体を埋め込む方法に興味があります)。
ボーナス質問:列をauthor_idとして表示し、ユーザーに関連付ける方法が見つかりませんでした。これが簡単な場合、どのように行いますか?
新しい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
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