2016-06-13 4 views
0

Я совершенно новый для рельсов и борьбы с самыми легкими вещами. У меня есть следующая проблема:Rails destroy не работает и пересылает неправильную ссылку

Когда я пытаюсь уничтожить поиск (из моего поиска модели), он не работает, и я перенаправляюсь на «/search.48 (поиск с идентификатором 48). Это дает мне уведомление «Мы сожалеем, но что-то пошло не так», и в консоли он говорит что-то с POST. Ни поиск не удаляется, либо работает redirect_to search_path. Что я делаю неправильно?

Это мой контроллер:

def show 
    @searches = current_user.searches 
end 

def destroy 
    @search = Search.find(params[:id]) 
    @search.destroy 
    flash[:success] = "Search deleted" 
    redirect_to search_path 
end 

Это мой вид шоу:

<% @searches.each do |search| %> 
<%= search.title %> 
<%= search.description %> 
<%= button_to "delete", search, method: :destroy %> 

Мой routes.rb:

get 'search' => 'searches#show' 
resources :searches 

И я включил <%= javascript_include_tag 'application' %> в application.html.erb, а также //= require jquery и //= require jquery_ujs в application.js файл.

Так что я действительно не могу найти свою ошибку. Кто-нибудь может мне помочь?

ответ

0

Я понял! В моем маршрутизаторе я написал get 'search' => 'search # show', и каким-то образом мой контроллер был сбит с помощью search_path. Поскольку я переименовал его, чтобы получить «mysearches» => «search # show» и mysearches_path, он отлично работает

1

В файле зрения, код для кнопки должен выглядеть следующим образом:

<%= button_to "delete", search, method: :delete %> 

Примечание метод является :delete, не :destroy. Это немного запутанно, потому что «delete» - это глагол REST, но «destroy» - это имя действия контроллера.

+0

Спасибо за ваш ответ. Если я использую вашу идею, появляется кнопка, и когда я нажимаю на нее, страница /search.48 по-прежнему загружается и ничего не удаляется ... – Eckenmeyer

+0

Мне интересно, некорректно ли кнопка создана или перенаправление неверно. Я думаю, что если вы попытаетесь перенаправить на «search_path» после удаления, он сгенерирует путь, используя только что удаленный поиск, что может быть, почему вы ничего не видите. Попробуйте 'redirect_to search_path' в контроллере (вместо' search_path ') –

+0

Думаю, я понял! В моем маршрутизаторе я worte получаю 'search' => 'search # show', и каким-то образом мой контроллер был путать с search_path. Поскольку я переименовал его, чтобы получить 'mysearches' => 'search # show' и mysearches_path, он отлично работает. – Eckenmeyer

1

вы пробовали:

<%= button_to "Delete", { action: "delete", id: search.id }, 
            method: :delete %> 

в просмотре. Также кажется, что вы перенаправляетесь на search_path, но я предполагаю, что вы хотите search_path.