2013-07-22 3 views
0

Я пытаюсь выяснить, как разрешить пользователю нажимать на ссылку или кнопку на индексной странице, чтобы очистить все объекты из базы данных приложения, а затем перенаправить на вновь очищенную страницу индекса. Итак, с примером модели Article, я ожидаю, что это должно иметь какое-то отношение к методу Article.destroy_all, и я ожидаю, что это будет простое решение, но я пробовал некоторые варианты и просто не уверен, как реально реализовать Это.Очистить базу данных в Rails

+0

В 'index' метода контроллера о котором идет речь, вы бы сделали так, как вы говорите: запустите 'destroy_all' o n объекты, которые вы хотите уничтожить, затем выполните «перенаправление» туда, куда вы хотите пойти. Сделайте снимок, и если вы застряли, вернитесь к stackoverflow с конкретным вопросом. – lurker

+0

Спасибо за ваш ответ. Я не хочу уничтожать объекты каждый раз, когда вызывается действие индекса, только если пользователь делает это по ссылке или кнопке на этой странице - поэтому я не уверен, как вы хотите установить это на место. – CodeBiker

+0

Конечно, я говорил вообще. У вас может быть действие в контексте этого контроллера, который вызывает эту проблему, а затем выполняет «переадресацию». – lurker

ответ

2

Таким образом, это будет другое действие в вашем контроллере. Если мы имеем дело со статьями, то контроллер будет:

class ArticlesController < ApplicationController 
    def indef 
    @articles = Article.all 
    end 

    def destroy_them_all 
    Article.destroy_all 
    redirect_to articles_path 
    end 
end 

А в представлении, где вы хотите, чтобы пользователь, чтобы нажать на кнопку, чтобы уничтожить все статьи:

<%= link_to 'Destroy them all', destroy_them_all_path, method: :delete, confirm: 'Are you crazy?' %> 

Не забудьте для добавления именованного маршрута в файл маршрутов:

match '/articles/destroy_them_all', to: 'Articles#destroy_them_all', via: :delete 

Это должно сработать. Хотя вам, возможно, придется проверить rake routes, чтобы убедиться, что я правильно понял destroy_them_all_path.

+0

Большое спасибо! Я получил это, чтобы работать с вашими предложениями, с несколькими необходимыми изменениями. Во-первых, я изменил обычный метод 'destroy' в моем контроллере, чтобы иметь« Article.destroy_all », за которым следует« redirect_to articles_path », а затем удалил перенаправление из метода« destroy_them_all »выше. Затем я изменил ссылку вида на 'article_destroy_them_all_path'. Наконец, я изменил капитализированные «Статьи» по указанному маршруту выше на строчные «статьи». (И была также опечатка в методе 'index' выше.) Большое спасибо за то, что указали мне в правильном направлении! – CodeBiker

0

попробовать это:

Статья контроллера:

def destroy_all 
    @Articles = Article.all 
    @Articles.each do |a|  
     a.destroy  
    end 
    redirect_to articless_path, notice: "Delted" 
    end 

маршруты:

post "articles/destroy_all" 

вид:

<%= form_tag ({ :controller => 'articles', :action => 'destroy_all' }) do%> 
<%= submit_tag 'destroy all'%> 
<% end %> 
+0

Этот способ удаления записей медленный и не рекомендуется. Вы должны использовать 'Article.destroy_all' или более эффективный кузен, который не запускает обратные вызовы destroy:' Article.delete_all'. – DiegoSalazar

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