我正在对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并销毁下一个id。
下面是rails日志:
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)
有人知道为什么吗?
发布于 2015-08-19 04:38:17
您应该使用Event.find(params[:id])
或Event.find_by(id: params[:id])
。
您的代码所发生的情况是,SQL查询查找每个事件(对于任何记录都是WHERE (66)
),而find_by
从集合中获取第一个记录,然后销毁它。请求中的ID并不重要。
发布于 2015-08-19 04:38:55
当您想要使用与不同属性一起使用以搜索use时,为什么要使用find_by
:
Event.find(params[:id])
如果不想引发异常(如果记录未找到),则使用find_by_id
Event.find_by_id(params[:id])
或者,如果您仍然想使用find_by
,您可以使用它,如果找不到记录,它将返回零:
Event.find_by(id: params[:id])
如果没有在此id中找到记录,则使用find_by!
处理异常:
Event.find_by!(id: params[:id])
https://stackoverflow.com/questions/32095614
复制