У меня есть две модели, которые соединены через третий:Синтаксическая ошибка в as_json при использовании нескольких уровня: включить
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
таблицы).
Согласно the 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: Ruby 1.9.3, Rails 3.2.13
--- EDIT --- Хорошо, я не» т действительно знаю, почему, но я получил это, чтобы получить ожидаемый результат:
format.json { render json: @playlist.as_json(
:include => { :song_in_playlists => {
:include => :song, :only => :track_number } }) }
Однако при попытке добавить { :except => [:dropbox_link, :local_path] }
между :song
и , :only
, я снова получаю те же ошибки ..
Ой, спасибо, большое спасибо. Я действительно не знаю, почему я постоянно забывал скобки вокруг ': song', хотя я сделал это правильно только несколько слов раньше для': song_in_playlists'. Классический: p – kah