2015-09-07 95 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