Rails возвращает ошибку для DELETE view> Нет подходящих маршрутов [GET] "/ assets" - PullRequest
1 голос
/ 15 марта 2012

Когда я нажимаю на ссылку «удалить» (чтобы удалить проект), я хочу показать новую страницу для пользователя, чтобы подтвердить удаление (страница «Вы уверены»). Но когда я нажимаю на ссылку, появляется ошибка Маршрут не соответствует [GET] "/ assets" , я не знаю почему. Кто-нибудь может мне помочь?

Это мои проекты / index.html.erb

  1   <% @projects.each do |p| %>
  2       <%= link_to p.name, project_path(p) %>
  3       <%= link_to "edit", edit_project_path(p) %> 
  4       <%= link_to "delete",{ :action => 'delete', :controller => 'projects', :id => p.id } %> 
  5   <% end %>

Это мои контроллеры / projects_controller.rb

 38   def delete     
 39     @project = Project.find(params[:id])
 40     render 'delete'
 41   end
 42     
 43   def destroy
 44     project = Project.find(params[:id])
 45     project.destroy
 46     flash[:notice] = "Page succesfully removed"
 47     redirect_to(projects_path)
 48   end

Это мои взгляды / projects / delete.html.erb

  1 <%= form_for(:project, :url => {:action => 'destroy', :id => @project.id }) do |f| %> 
  2   <p>Are you sure you want to remove "<%= @project.name %>"</p>
  3   <%= submit_tag ("Yes, I am sure")
  4 <% end %>

РЕДАКТИРОВАТЬ: мой URL выглядит так >>> http://localhost:3000/assets?action=delete&controller=projects&id=1

РЕДАКТИРОВАТЬ 2: решение идет в route.rb и добавляет эту строку

  match ':controller(/:action(/:id))(.:format)'

Теперь появляется страница удаления. Однако, когда я нажимаю кнопку удаления, Rails возвращает ошибку >> Неизвестное действие. Не удалось найти действие «6» для ProjectsController

1 Ответ

2 голосов
/ 15 марта 2012

Проблема в этой строке:

<%= form_for(:project, :url => {:action => 'destroy', :id => @project.id }) do |f| %>

Вы не говорите использовать HTTP-метод DELETE при создании этого

<%= form_for(:project, :url => {:action => 'destroy', :id => @project.id }, :method => :delete) do |f| %>

Вы также можете написать это, намного короче, как это:

<%= form_for(@project, :method => :delete) do |f| %>

Rails будет точно знать, какой URL создать, поэтому вам не нужно указывать, что делать.


Бонус

Вы также можете сделать это с начальным link_to:

<%= link_to "delete", [:delete, project], :method => :delete %>

Массив в качестве второго аргумента здесь будет компилировать маршрут, используя полиморфный построитель маршрутов в Rails.

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