我正在向rails传递一个ajax请求,传入数据id。
这里是ajax
function delete_availability(id) {
var id = id;
$.ajax({
type: "DELETE",
url: "/events/" + id,
statusCode: {
200: function() {
//alert("200");
},
202: function() {
//alert("202");
}
},
success: function(data) {
console.log('availability deleted');
},
error: function(xhr) {
alert("The error code is: " + xhr.statusText);
}
});
}
我的销毁行动
def destroy
@event = Event.find_by(params[:id]);
respond_to do |format|
if @event.destroy
format.json {
render json: {}
}
end
end
end
我的活动模型中没有任何内容
class Event < ActiveRecord::Base
end
问题是即使rails收到正确的id,当它用于销毁时,它会改变id并破坏下一个。
这是 rails log:
Processing by EventsController#destroy as */*
Parameters: {"id"=>"66"}
Event Load (0.1ms) SELECT "events".* FROM "events" WHERE (66) LIMIT 1
(0.0ms) begin transaction
SQL (0.2ms) DELETE FROM "events" WHERE "events"."id" = ? [["id", 65]]
(2.4ms) commit transaction
Completed 200 OK in 6ms (Views: 0.1ms | ActiveRecord: 2.8ms)
谁知道为什么?
答案 0 :(得分:6)
您应该使用Event.find(params[:id])
或Event.find_by(id: params[:id])
。
您的代码会发生的事情是SQL查询发现每个事件 - WHERE (66)
对于任何记录都是真的 - 而find_by
从该集合中获取第一条记录,并且它会被销毁。请求中的ID并不重要。
答案 1 :(得分:1)
当您想要使用不同的属性进行搜索时,为什么要使用find_by
:
Event.find(params[:id])
如果你想在没有找到记录
的情况下不抛出异常,请使用find_by_idEvent.find_by_id(params[:id])
或者,如果您仍然想使用find_by
,您可以使用,如果没有找到记录,则返回nil:
Event.find_by(id: params[:id])
如果找不到包含此ID的记录,请使用find_by!
来解决异常:
Event.find_by!(id: params[:id])