Rails help не может удалить объект - PullRequest
0 голосов
/ 05 марта 2011

У меня проблема.Я не могу удалить категорию.

Рейк-маршруты:

       admin_kategoris GET    /admin/kategoris(.:format)               {:action=
>"index", :controller=>"admin/kategoris"}
                        POST   /admin/kategoris(.:format)              {:action=
>"create", :controller=>"admin/kategoris"}
     new_admin_kategori GET    /admin/kategoris/new(.:format)          {:action=
>"new", :controller=>"admin/kategoris"}
    edit_admin_kategori GET    /admin/kategoris/:id/edit(.:format)     {:action=
>"edit", :controller=>"admin/kategoris"}
         admin_kategori GET    /admin/kategoris/:id(.:format)          {:action=
>"show", :controller=>"admin/kategoris"}
                        PUT    /admin/kategoris/:id(.:format)          {:action=
>"update", :controller=>"admin/kategoris"}
                        DELETE /admin/kategoris/:id(.:format)          {:action=
>"destroy", :controller=>"admin/kategoris"}

Мой индекс индекса категории:

<% @kategoris.each do |kategori| %>
  <tr>
    <td><%= kategori.name %></td>
    <td><%= link_to 'show', {:action => 'show', :id => kategori.id}, :class => 'action show' %></td>
    <td><%= link_to 'edit', {:action => 'edit', :id => kategori.id}, :class => 'action edit' %></td>
    <td><td><%= link_to 'slet', {:action => 'destroy', :id => kategori.id, :method => :delete}, :class => 'action destroy' %></td></td>
  </tr>
<% end %>

Мой контроллер категории:

 def destroy
    @kategori = Kategori.find(params[:id])
    @kategori.destroy

    respond_to do |format|
      format.html { redirect_to(kategoris_url) }
      format.xml  { head :ok }
    end
  end

Мои маршруты.rb:

namespace :admin do
resources :kategoris
end

При нажатии кнопки slet появляется сообщение об ошибке (Удалить):

Started GET "/admin/kategoris/1?method=destroy" for 127.0.0.1 at 2011-03-05 20:0
8:57 +0100
  Processing by Admin::KategorisController#show as HTML
  Parameters: {"method"=>"destroy", "id"=>"1"}
  ←[1m←[36mKategori Load (1.0ms)←[0m  ←[1mSELECT `kategoris`.* FROM `kategoris`
WHERE (`kategoris`.`cached_slug` = '1') LIMIT 1←[0m
  ←[1m←[35mSQL (1.0ms)←[0m  SELECT sluggable_id FROM slugs WHERE ((slugs.sluggab
le_type = 'Kategori' AND slugs.name = '1' AND slugs.sequence = 1))
  ←[1m←[36mKategori Load (0.0ms)←[0m  ←[1mSELECT `kategoris`.* FROM `kategoris`
WHERE (`kategoris`.`id` = 1) LIMIT 1←[0m
Rendered admin/kategoris/show.html.erb within layouts/application (5.0ms)
Completed   in 166ms

ActionView::Template::Error (No route matches {:action=>"edit", :controller=>"ka
tegoris", :id=>#<Kategori id: 1, name: "Elektronik", created_at: "2011-02-17 04:
18:11", updated_at: "2011-02-17 04:18:11", cached_slug: "">}):
    6: </p>
    7:
    8:
    9: <%= link_to 'Edit', edit_kategori_path(@kategori) %> |
    10: <%= link_to 'Back', admin_kategoris_path %>
  app/views/admin/kategoris/show.html.erb:9:in `_app_views_admin_kategoris_show_
html_erb__679400070_47327076__118033797'
  app/controllers/admin/kategoris_controller.rb:18:in `show'

Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.3/lib/action_dispatc
h/middleware/templates/rescues/_trace.erb (1.0ms)
Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.3/lib/action_dispatc
h/middleware/templates/rescues/_request_and_response.erb (4.0ms)
Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.3/lib/action_dispatc
h/middleware/templates/rescues/template_error.erb within rescues/layout (57.0ms)

Моя ссылка для редактирования работает.

Ответы [ 2 ]

3 голосов
/ 05 марта 2011

При использовании RESTful-действий Rails метод destroy вызывается запросом DELETE (как указано «DELETE» в начале вашего вывода rake routes), а не запросом GET (который используется по умолчанию).если не указано иное).Таким образом, вам нужно указать это в вашей ссылке:

<td><%= link_to 'slet', {:action => 'destroy', :id => kategori.id}, :method => :delete, :class => 'action destroy' %></td>

Это можно упростить до:

<td><%= link_to 'slet', admin_kategori_path(kategori), :method => :delete, :class => 'action destroy' %></td>

, поскольку admin_kategori является именованным маршрутом, который ведет к правильному URL,и использование метода DELETE автоматически вызовет действие destroy (поскольку именно так говорят маршруты).

[Обновить]

Также возможно, что у вас нет UJS настроен правильно.Вам необходимо:

  1. убедиться, что тег сценария rails.js (и любые библиотеки, от которых он может зависеть, например, Prototype или jQuery в зависимости от вашей настройки) включен в ваш макет, и
  2. убедитесь, что вы выводите csrf_meta_tag в начале макета.Если нет, то не будет работать
0 голосов
/ 05 марта 2011

Посмотрите здесь: http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

Чтобы уничтожить ресурсы в формате REST, вам нужно иметь http-запрос на DELETE

Таким образом, вам необходимо добавить дополнительную опцию: :method => :delete

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...