RubyonRails——javascript没有';行不通
我需要实施星级评定系统,让RubyonRails——javascript没有';行不通,javascript,ruby-on-rails,rating-system,Javascript,Ruby On Rails,Rating System,我需要实施星级评定系统,让用户评定酒店。我举了一个例子 rating.js文件是: $(function() { $('.rating_star').click(function() { var star = $(this); var form_id = star.attr("data-form-id"); var stars = star.attr("data-stars"); $('#' + form_id + '_stars').val(stars);
用户
评定酒店
。我举了一个例子
rating.js文件是:
$(function() {
$('.rating_star').click(function() {
var star = $(this);
var form_id = star.attr("data-form-id");
var stars = star.attr("data-stars");
$('#' + form_id + '_stars').val(stars);
$.ajax({
type: "post",
url: $('#' + form_id).attr('action') + '.json',
data: $('#' + form_id).serialize(),
success: function(response){
console.log(response);
update_stars();
if(response["avg_rating"]){
$('#average_rating').text(response["avg_rating"]);
}
}
})
});
});
function update_stars(){
$('.star_rating_form').each(function() {
var form_id = $(this).attr('id');
set_stars(form_id, $('#' + form_id + '_stars').val());
});
}
function set_stars(form_id, stars) {
for(i = 1; i <= 5; i++){
if(i <= stars){
$('#' + form_id + '_' + i).addClass("on");
} else {
$('#' + form_id + '_' + i).removeClass("on");
}
}
}
带有评级星的页面来源包括以下行:
UPD1:rails错误日志的输出显示我错过了end
语句。。。添加后,错误发生了变化:
Started PATCH "/ratings/2.json" for 127.0.0.1 at 2014-07-19 18:52:43 +0400
Processing by RatingsController#update as JSON
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7DwBNYlmmucwodZ8UDINYIaMG8Ep4sloBGEoiaiXoxQ=", "rating"=>{"hotel_id"=>"10", "user_id"=>"1", "stars"=>"5"}, "id"=>"2"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = '715016a7327649b3aaeb6f7e65b10996cbe1eb08' LIMIT 1
Rating Load (0.2ms) SELECT "ratings".* FROM "ratings" WHERE "ratings"."id" = ? LIMIT 1 [["id", 2]]
Hotel Load (0.1ms) SELECT "hotels".* FROM "hotels" WHERE "hotels"."id" = ? ORDER BY created_at DESC LIMIT 1 [["id", 10]]
(0.1ms) begin transaction
(0.1ms) rollback transaction
Completed 500 Internal Server Error in 21ms
ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):
app/controllers/ratings_controller.rb:20:in `update'
Rendered /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.9ms)
Rendered /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (1.1ms)
Rendered /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (5.2ms)
Rendered /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb (72.6ms)
下一行中的控制器中出现错误:
@rating.update_attributes(params[:rating])
您收到的错误表明您错过了文件末尾的
end
语句
这很可能是因为缩进错误,可能导致了不平衡的end
语句
以下是文件的结尾:
def js_logged_in
if(!signed_in?)
flash[:error] = "You must be a signed in to leave a rating!"
render :js => "window.location = '/signin'"
end
end
最后的
end
不会关闭类定义,它会关闭def js_logged_in
方法。如果没有缩进if
,那么与def js\u logged\u匹配的end
实际上是在关闭if
你所说的“我认为错误完全在java代码中”是什么意思?浏览器控制台的输出是什么?有JS错误吗?对不起,我是说“某处”。不,控制台中没有错误。能否显示此错误的控制台日志?抱歉,我不清楚。运行错误日志就是我的意思。基本上是终端窗口,当您单击星型时,您会在其中写入“rails服务器”,您会得到一个内部服务器错误。如果有错误,请告诉我们log@AlMacks请粘贴有问题的整个输出。您是对的,但现在有一个新错误(在我添加了“end”之后)。UPD…当我将行更改为@rating.update_attributes(rating_params)时,它就消失了。非常感谢。
def js_logged_in
if(!signed_in?)
flash[:error] = "You must be a signed in to leave a rating!"
render :js => "window.location = '/signin'"
end
end