首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rails 4-销毁操作删除错误记录

Rails 4-销毁操作删除错误记录
EN

Stack Overflow用户
提问于 2015-08-19 12:31:43
回答 2查看 70关注 0票数 0

我正在对rails执行ajax请求,将数据传递给id。

这是ajax

代码语言:javascript
代码运行次数:0
运行
复制
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);
      }
    });
  }

我的毁灭行动

代码语言:javascript
代码运行次数:0
运行
复制
def destroy

    @event = Event.find_by(params[:id]);

    respond_to do |format|
      if @event.destroy
        format.json {
          render json: {}
        }
      end
    end
  end

我的事件模型在其中没有任何内容--

代码语言:javascript
代码运行次数:0
运行
复制
class Event < ActiveRecord::Base

end

问题是,即使rails接收到正确的id,但当它用于销毁时,它会更改id并销毁下一个id。

下面是rails日志:

代码语言:javascript
代码运行次数:0
运行
复制
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)

有人知道为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-19 12:38:17

您应该使用Event.find(params[:id])Event.find_by(id: params[:id])

您的代码所发生的情况是,SQL查询查找每个事件(对于任何记录都是WHERE (66) ),而find_by从集合中获取第一个记录,然后销毁它。请求中的ID并不重要。

票数 6
EN

Stack Overflow用户

发布于 2015-08-19 12:38:55

当您想要使用与不同属性一起使用以搜索use时,为什么要使用find_by

代码语言:javascript
代码运行次数:0
运行
复制
Event.find(params[:id])

如果不想引发异常(如果记录未找到),则使用find_by_id

代码语言:javascript
代码运行次数:0
运行
复制
Event.find_by_id(params[:id])

或者,如果您仍然想使用find_by,您可以使用它,如果找不到记录,它将返回零:

代码语言:javascript
代码运行次数:0
运行
复制
Event.find_by(id: params[:id])

如果没有在此id中找到记录,则使用find_by!处理异常:

代码语言:javascript
代码运行次数:0
运行
复制
 Event.find_by!(id: params[:id])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32095614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档