2015-09-07 2 views
1

В музыкальном приложении Rails я пытаюсь подсчитать пьесы для треков исполнителей, создав объект play, когда посетитель сайта воспроизводит дорожку. Каждый play имеет свой уникальный идентификатор и принадлежит к треку.Создать объект Rails с AJAX/Javascript

В настоящее время у меня есть функция создания, созданная в файле plays_controller.rb в API. Однако у меня возникают проблемы с подключением к кнопкам воспроизведения на странице, так что воспроизведение трека фактически создает новый игровой объект, принадлежащий этому конкретному треку.

Пользователи могут играть треки в приложении с помощью кнопок, как это:

<% @top_tracks.each do |track| %> 
    <button class="track-play track-<%= track.id %>-play" onclick="playTrack(<%= track.to_json %>)"> 
    <i class="icon-play"></i> 
    </button> 
    ... 
    [info about the track, such as <%= track.title %>] 
    ... 
<% end %> 

Вот соответствующие части файла routes.rb, чтобы показать, где plays_controller.rb находится в API:

namespace :api, defaults: {format: 'json'} do 
    namespace :v1 do 
    resources :plays, only: [:index, :create] 
    end 
end 

Вот соответствующие части файла plays_controller.rb:

def create 
    @play = Play.create!(play_params) 
    render(:json => {}, :status => :created) 
end 

private 
def play_params 
    params.require(:play).permit(:track_id) 
end 

А вот соответствующие части соответствующего Javascript:

var player = document.getElementById('audio'); 

window.playTrack = function (track) { 
    player.setAttribute('src', track.file_url); 
    player.play(); 

    var trackId = track.id; 
}; 

Я не уверен, как использовать AJAX, чтобы правильно создать новый объект воспроизведения. Я попытался это добавление к функции playTrack в Javascript выше:

$.ajax({ 
    type: "POST", 
    url: '/api/v1/plays', 
    data: { track_id: trackId } 
}) 

Но это не сработало, и дал мне сообщение об ошибке «PARAM не найдено: играть» (который, казалось, выброшен из play_params в действии plays_controller.rb).

Любая помощь, получающая эту работу, будет высоко оценена.

+0

Что находится в 'play_params'? – Nithin

+0

@ Нить, я показал «play_params» в третьем фрагменте кода, один из «play_controller.rb» – Andrew

ответ

2

Rails ожидает, что параметры будут вложены, например. play_ track_id следует называть play[track_id]. Вероятно, вы можете решить эту проблему, включив в данные AJAX объект воспроизведения, например:

$.ajax({ 
    type: "POST", 
    url: '/api/v1/plays', 
    data: { play: { track_id: trackId } } 
}) 
+0

хороший звонок! Благодаря! – Andrew

Смежные вопросы