2015-03-13 4 views
0

У меня самая странная проблема! В моем приложении RoR у меня есть цикл .each. Каждая итерация имеет link_to «Удалить» для этой конкретной итерации:link_to удалить, удалить неправильную запись

- @evints.each do |e| 
    .inteventimg 
     = link_to e.event.name, e.event 
     = e.id 
     %br 
     - if e.event.images.exists? 
     = image_tag(e.event.images.find_by(:prime => true).location.full.url) 
     %br 
     - if current_user 
     = link_to "Delete #{e.id}", e, :method => :delete, data: {:confirm => 'Are you sure?'} 

Evint является объединением таблиц в has_many через отношения между интересом и событием; в моем контроллере интересов по показам, я определил @evints как @ interest.evints.

Все работает - отображаются правильные изображения, правильный e.id появляется как рядом с именем e.name, так и самой ссылкой «Удалить»; но последовательно, первое удаление на странице удаляется, а не тот, для которого нажата кнопка «Удалить». Я не могу понять. , , У кого-нибудь есть идеи?

EDIT: Вот код удаления из контроллера Evint:

def destroy 
@evint = Evint.find_by(params[:id]) 
authorize @evint 

if @evint.destroy 
    flash[:notice] = "Your evint has been removed." 
    redirect_to :back 
else 
    flash[:error] = "Evint couldn't be deleted. Please try again." 
    redirect_to :back 
end 

конец

Спасибо.

+0

Убедитесь, что вызывается правильное действие # контроллера. И можете ли вы опубликовать код действия удаления? – Swards

+0

Я добавил код действия контроллера выше. –

ответ

1

Ваш контроллер код неверен:

@evint = Evint.find_by(params[:id]) 

должен быть

@evint = Evint.find(params[:id]) 

или

@evint = Evint.find_by(id: params[:id]) 

Как он, SQL генерируется будет иметь вид (при условии, params[:id] было 123)

SELECT * from evints where (123) limit 1 

Что будет соответствовать любой строке в базе данных

Смежные вопросы