2015-09-07 89 views
1

在Rails音樂應用程序中,我試圖通過在網站訪問者播放曲目時創建play對象來爲藝術家曲目計數播放。每個play都有其自己的唯一ID並屬於一個軌道。使用AJAX/Javascript創建Rails對象

目前,我在API中的plays_controller.rb文件中設置了創建功能。但是,我無法將其連接到頁面上的播放按鈕,以便播放曲目實際上會創建屬於該特定曲目的新播放對象。

用戶可以播放使用按鈕的應用程序的軌道是這樣的:

<% @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來正確地創建一個新的遊戲對象。我試着在上面的Javascript這添加到playTrack功能:

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

但它沒有工作,給我的錯誤消息「參數未發現:玩」(這似乎從play_params拋出在plays_controller.rb創建操作)。

任何幫助獲得這項工作將不勝感激。

+0

'play_params'中有什麼? – Nithin

+0

@Nithin,我在第三個代碼片段中展示了'play_params',一個來自'plays_controller.rb' – Andrew

回答

2

導軌期望這些參數是嵌套的,例如, play的track_id應該被命名爲play[track_id]。您可以通過在您的AJAX數據中包含播放對象來解決此問題,如下所示:

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

的好調用!謝謝! – Andrew