3 番目のモデルを介して接続されている 2 つのモデルがあります。
Playlist has_many :song_in_playlists, :dependent => :destroy
has_many :songs, :through => :song_in_playlists
Song has_many :song_in_playlists, :dependent => :destroy
has_many :playlists, :through => :song_in_playlists
このsong_in_playlist
表には、playlist_id
、song_id
、およびtrack_number
.
を呼び出すとき/playlists/1.json
に、プレイリストの属性を保持し、曲を含む別のハッシュを内部に持つ json ハッシュを取得したいと思います (/songs.json
プラステーブル エントリtrack_number
からのように)。song_in_playlists
Rails APIによると、次のようにしてこれを達成できるはずです。
def show
@playlist = Playlist.find(params[:id])
[...]
respond_to do |format|
format.html # show.html.erb
format.json { render json: @playlist.as_json(
:include => { :song_in_playlists => {
:only => :track_number, :include => :songs {
:except => [:dropbox_link, :local_path] } } }
) }
end
end
end
ただし、私が得るものは次のとおりです。
/home/sloth/audiomixer/app/controllers/playlists_controller.rb:30: syntax error, unexpected '{', expecting '}'
:only => :track_number, :include => :songs {
^
/home/sloth/audiomixer/app/controllers/playlists_controller.rb:31: syntax error, unexpected '}', expecting keyword_end
:except => [:dropbox_link, :local_path] } } }
^
/home/sloth/audiomixer/app/controllers/playlists_controller.rb:103: syntax error, unexpected $end, expecting keyword_end
だから私は少し複雑さを減らしてみました。
format.json { render json: @playlist.as_json(
:include => song_in_playlists {
:only => :track_number } ) }
しかし、私は同様のエラーが発生しています。かっこの間に中かっこを入れるとすぐに、Rails は文句を言いますが、API ドキュメントには反対のことが書かれています。
私はもう何を試すべきか本当にわかりません:(
PS: ルビー 1.9.3、レール 3.2.13
---編集--- わかりました、理由はよくわかりませんが、期待される出力を生成するためにこれを得ました:
format.json { render json: @playlist.as_json(
:include => { :song_in_playlists => {
:include => :song, :only => :track_number } } ) }
{ :except => [:dropbox_link, :local_path] }
ただし、 との間に追加しようとする:song
と, :only
、同じエラーが再び発生します..