【发布时间】:2016-08-02 09:19:48
【问题描述】:
我想做什么:
我正在创建一个 ruby on rails 应用程序,它拥有一个播放列表。播放列表属于一个用户对象,是一个散列。我需要两个关键按钮。一个用于将新音乐添加到哈希中,另一个用于从哈希中删除音乐。我正在使用 javascript 来跟踪当前歌曲,每当按下添加按钮时,它都应该通过 ajax 发送回 add_song 控制器,然后该字符串将被添加到播放列表哈希中。但是我坚信我的实施已经关闭,因为我不断收到 500 错误。目前我只担心 add_song 按钮。非常感谢任何帮助!
当前错误: POST http://localhost:3000/adding 500(内部服务器错误)
下面是我不显眼的 javascript 代码:
var player = new Audio("File1.mp3");
var value = 1 ;
var track = "File.mp3";
function backward() {
var temp2 = player.src[player.src.length - 5] ;
if ( temp2 != 1){
value = parseInt(temp2);
value -= 1;
player.src = "/File"+value+".mp3";
player.play();
}
}
function forward() {
var temp2 = player.src[player.src.length - 5] ;
if ( temp2 != "5") {
value = parseInt(temp2);
value += 1;
player.src = "/File"+value + ".mp3";
player.play();
}
}
function play(){
player.src = "/File"+value + ".mp3";
player.play();
}
function pause( ) {
player.pause();
}
//add button
//delete button
function get_song() {
return player.src
}
$(document).ready(function() {
$("div div").click( function(){
if ( this.id == 'play' ) {
play();
}else if(this.id == 'backward'){
backward();
}else if(this.id == 'forward'){
forward();
}else if(this.id == 'stop') {
pause() ;
}else if(this.id == 'add_song') {
$.ajax({
url: "adding",
type: "post",
data: {data_value: JSON.stringify(player.src)}
});
}
});
});
下面是我的静态页面控制器
class StaticPagesController < ApplicationController
respond_to :js, :json, :html
def add_song()
if user_signed_in?
session[:user_id] = current_user.id
present_user = User.find(session[:user_id])
puts present_user
present_user.playlist.store(params[:data_value], 1)
present_user.save
puts "It works"
else
end
end
def remove_song()
if user_signed_in?
session[:user_id] = current_user.id
present_user = User.find(session[:user_id])
present_user.playlist.delete(params[:data_value])
present_user.save
else
end
end
def home
end
end
最后是我的路线:
devise_for :users, :controllers => { :sessions => "sessions" , :registrations => "registrations"}
devise_scope :user do
get "/log_in" => "sessions#new" ,as: :new_user_sessions
post '/log_in' => "sessions#create" ,as: :user_sessions
delete "/destroy" => "devise/sessions#destroy", as: :destroy_user
get '/edit' => 'devise/registrations#edit'
get "/sign_up" => "registrations#new", as: :new_user_registrations
post "/sign_up" => "registrations#create", as: :user_registrations
end
root 'static_pages#home'
match '/home', to:'static_pages#home', via: 'get'
match '/adding', to: 'static_pages#add_song', via: 'post'
【问题讨论】:
-
llog 中的错误是什么?
-
It works Completed 500 Internal Server Error in 71ms (ActiveRecord: 1.1ms) ActionView::MissingTemplate (Missing template static_pages/add_song, application/add_song with {:locale=>[:en], :formats=>[:html, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip, :web_console_v2], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]} -
好的,你正在发送数据。它试图渲染一个视图,因为这是一个正常的 rails 机制,除非你覆盖它。您可以为
add_song发布您的控制器操作吗? -
@trh 这就是你要找的吗?
adding POST /adding(.:format) static_pages#add_song -
实际上,来自
app/controllers/static_pages_controller.rb的实际操作 - add_song 方法就是我们所需要的。
标签: javascript ruby-on-rails ruby ajax hash