2013-08-01 3 views
1

Я застреваю в Delete/Destroy. Любая помощь будет оценена!Почему ссылки на удаление/удаление ссылок не работают?

Я использую Ruby 2.0.0 и Rails 3.2.6 на Mac 10.8.3 с Postgres.

Это удаление звено, которое должно работать:

<%= link_to 'Destroy', @product, method: :delete, data: { confirm: 'Are you sure?' } %> 

Но когда я нажимаю на ссылку Уничтожить он направляет меня в профиле пользователя. У меня нет окна подтверждения, и никаких действий не предпринимается (удалять). Кажется, он просто остался на той же странице. Я использую Firefox, но в IE и Chrome такие же.

Это то, что у меня есть:

  1. Драгоценный камень "Jquery-рельс" установлен

  2. applications.js (из приложения/активов/JavaScripts) имеет следующие строки:

    //= require jquery 
    //= require jquery_ujs 
    //= require_tree . 
    
  3. application.html.erb (из приложения/виды/макеты) имеет следующие строки:

    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    

    В представлении я вижу:

    <script src="/assets/application.js?body=1" type="text/javascript"></script> 
    <meta content="authenticity_token" name="csrf-param" /> 
    <meta content="MVlJi+WJE1cwWoHnBrpRWIa13gqio0iPT3IL6kpQYdE=" name="csrf-token" /> 
    
  4. в products_controllers.rb (от приложений/контроллеров) у меня есть:

    def destroy 
        @product = Product.where(:id => params[:id]).first 
        @product.destroy 
    
        respond_to do |format| 
         format.html { redirect_to products_url } 
         format.json { head :no_content} 
        end 
    end 
    
  5. в routes.rb (от конфигурации) у меня есть:

    resources :products 
    

Что я Неправильно с этой ссылкой Destroy?

В том же проекте RoR ссылка Edit работает нормально.

Итак, почему ссылка не работает? Это проблема Javascript или какая-то другая проблема, которую я не вижу?

А вот журнал сервер (кажется «удалить» действие не было выполнено)

Started GET "/products/9" for 127.0.0.1 at 2013-08-01 20:01:08 -0500 
Processing by ProductsController#show as HTML 
Parameters: {"id"=>"9"} 
Product Load (0.1ms) SELECT "products".* FROM "products" WHERE "products"."id" = 9 LIMIT 1 
Rendered products/show.html.erb within layouts/application (0.5ms) 
Completed 200 OK in 27ms (Views: 25.8ms | ActiveRecord: 0.1ms) 
+0

Поиск в консоли браузера для ошибок 'JavaScript'. –

+0

Попробуйте использовать 'link_to 'Destroy', product_path (@ product.id), метод:: delete', а также взгляните на это: http://stackoverflow.com/questions/4423314/link-to-delete-url- is-not-working – MrYoshiji

+0

См. журнал вашего сервера. – cortex

ответ

0

Один полезным способом для решения вопросов пути с рельсами к типу «реки маршрутов» в консоли , чтобы иметь список всех путей, доступных для игры с вашими ресурсами.

Объявив в вашем файле routes.rb «resources: products», «rake routes» предоставит список действий Prefix/Verb/URI Pattern/Controller # Action для данного конкретного ресурса.Вы будете иметь что-то вроде:

Prefix Verb URI Pattern 
product GET /product/:id(.:format) product#show 
     PATCH /product/:id(.:format) product#update 
     DELETE /product/:id(.:format) product#destroy 

Возьмите слово колонки префикса (продукта), добавьте _path этому слову (product_path), использовать правильный метод (DELETE), проход Иды как параметры (в этом случае вы можете просто сделать product_path (@product)), и все готово. Вы будете иметь:

<%= link_to "Delete", product_path(@product), method: :delete, data: { confirm: "Are you sure?" } %> 
+0

Эй, я пробовал рейк-маршруты, и я получил то, что вы набрали выше, я сменил код на то, что вы набрали здесь ... Это не сработало .....-_- || – Lisa

+0

Должен ли я поставить «<% = link_to» «Удалить», product_path (@product), метод:: удалить, данные: {подтвердить: «Вы уверены?»}%> «В отдельном представлении? Я поместил его в show.html.erb прямо сейчас ... – Lisa

0

Возможно (я только гадать, но один день я столкнулся с подобной проблемой), если вы проектируете каталог или магазин с корзиной покупок на основе книги Agile Web Development с Rails, то модель продукта может содержать фильтр before_destroy :ensure_not_referenced_by_any_line_item, который предотвращает разрушение продукта в случае, если продукт указан в LineItems. Если это ваш случай, вы можете очистить список LineItems в ProductsController, прежде чем уничтожить продукт. В противном случае извините.