2015-08-19 3 views
0

Я делаю запрос ajax для рельсов, передавая в данные идентификатор.Rails 4 - уничтожить действие удаляет неправильную запись

вот Аякса

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 

проблема в том, даже если рельсы получает Колорадо rrect id, когда он идет на уничтожение, он меняет id и уничтожает следующий.

здесь необходимо войти в рельсы:

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

Пожалуйста, ваши модели событий. –

+0

ничего в этом нет. просто объявление класса, обновляя мой пост anyhow –

+2

Измените 'find_by' на' find'. – MurifoX

ответ

6

Вы должны использовать Event.find(params[:id]) или Event.find_by(id: params[:id]).

Что происходит с вашим кодом, так это то, что SQL-запрос находит каждое событие - WHERE (66) истинно для любой записи - и find_by берет первую запись из набора и уничтожается. Идентификатор запроса не имеет значения.

1

Почему вы используете find_by его использовать, когда вы хотите использовать с другим атрибутом для поиска использовать:

Event.find(params[:id]) 

ИЛИ использовать find_by_id, если вы хотите, чтобы не выбросить исключение, если запись не найти

Event.find_by_id(params[:id]) 

ИЛИ если вы все еще хотите использовать find_by, вы можете использовать, если запись не найдена, она возвращает ноль:

Event.find_by(id: params[:id]) 

и использовать find_by! для throuw исключение, если запись не найдена с этим идентификатором:

Event.find_by!(id: params[:id]) 
Смежные вопросы