2016-04-30 3 views
0

Я пишу страницу, на которой есть новостная лента, и возникают проблемы с удалением сообщения. Когда я попытался удалить определенную должность, он даст мне ошибку:ActionController :: RoutingError Нет совпадений маршрута [DELETE]

ActionController :: RoutingError (нет маршрута матчей [не УДАЛИТЬ] «/news.305»):

, например (305 является идентификатором)

Что я делаю неправильно?

Вот мой news_controller

class NewsController < ApplicationController 
    before_action :logged_in_user, only: [:create, :destroy] 
    before_action :admin_user, only: [:create, :destroy] 

def news_page 
    @news = News.paginate(page: params[:page], per_page: 10) 
    if logged_in? 
    @news_post = current_user.news.build if current_user.admin? 
    @news_feed = News.paginate(page: params[:page], per_page: 8) 
    end 
end 

def create 
    @news_post = current_user.news.build(news_params) 
    if @news_post.save 
    flash[:success] = "News updated!" 
    redirect_to news_url 
    else 
    @news_feed = [] 
    render "news/news_page" 
    end 
end 

def destroy 
    News.find(params[:id]).destroy 
    flash[:success] = "News deleted" 
    redirect_to news_url 
end 

private 

    def news_params 
    params.require(:news).permit(:content, :news_title) 
    end 

конец

Вот маршруты:

  Prefix Verb URI Pattern   Controller#Action 
    password_resets_new GET /password_resets/new(.:format)  password_resets#new 
    password_resets_edit GET /password_resets/edit(.:format)   password_resets#edit 
        root GET /          static_pages#home 
       history GET /history(.:format)      static_pages#history 
        help GET /help(.:format)       static_pages#help 
       contact GET /contact(.:format)      static_pages#contact 
        about GET /about(.:format)      static_pages#about 
       downloads GET /downloads(.:format)     static_pages#downloads 
        news GET /news(.:format)       news#news_page 
        signup GET /signup(.:format)      users#new 
       testpage GET /testpage(.:format)      static_pages#testpage 
    delete_inactive_users GET /delete_inactive_users(.:format)  users#delete_inactive_users 
        login GET /login(.:format)      sessions#new 
         POST /login(.:format)      sessions#create 
        logout DELETE /logout(.:format)      sessions#destroy 
        users GET /users(.:format)      users#index 
         POST /users(.:format)      users#create 
       new_user GET /users/new(.:format)     users#new 
       edit_user GET /users/:id/edit(.:format)    users#edit 
        user GET /users/:id(.:format)     users#show 
         PATCH /users/:id(.:format)     users#update 
         PUT /users/:id(.:format)     users#update 
         DELETE /users/:id(.:format)     users#destroy 
edit_account_activation GET /account_activations/:id/edit(.:format) account_activations#edit 
     password_resets POST /password_resets(.:format)    password_resets#create 
     new_password_reset GET /password_resets/new(.:format)   password_resets#new 
    edit_password_reset GET /password_resets/:id/edit(.:format)  password_resets#edit 
      password_reset PATCH /password_resets/:id(.:format)   password_resets#update 
         PUT /password_resets/:id(.:format)   password_resets#update 
       news_index POST /news(.:format)       news#create 
         DELETE /news/:id(.:format)      news#destroy 

Вот полные коды ошибок:

Started DELETE "/news.305" for 209.150.49.143 at 2016-04-30 23:07:52 +0000 

ActionController::RoutingError (No route matches [DELETE] "/news.305"): 
    web-console (2.0.0.beta3) lib/action_dispatch/debug_exceptions.rb:22:in `middleware_call' 
    web-console (2.0.0.beta3) lib/action_dispatch/debug_exceptions.rb:13:in `call' 
    actionpack (4.2.2) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.2.2) lib/rails/rack/logger.rb:38:in `call_app' 
    railties (4.2.2) lib/rails/rack/logger.rb:20:in `block in call' 
    activesupport (4.2.2) lib/active_support/tagged_logging.rb:68:in `block in tagged' 
    activesupport (4.2.2) lib/active_support/tagged_logging.rb:26:in `tagged' 
    activesupport (4.2.2) lib/active_support/tagged_logging.rb:68:in `tagged' 
    railties (4.2.2) lib/rails/rack/logger.rb:20:in `call' 
    actionpack (4.2.2) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
    rack (1.6.4) lib/rack/methodoverride.rb:22:in `call' 
    rack (1.6.4) lib/rack/runtime.rb:18:in `call' 
    activesupport (4.2.2) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
    rack (1.6.4) lib/rack/lock.rb:17:in `call' 
    actionpack (4.2.2) lib/action_dispatch/middleware/static.rb:113:in `call' 
    rack (1.6.4) lib/rack/sendfile.rb:113:in `call' 
    railties (4.2.2) lib/rails/engine.rb:518:in `call' 
    railties (4.2.2) lib/rails/application.rb:164:in `call' 
    rack (1.6.4) lib/rack/lock.rb:17:in `call' 
    rack (1.6.4) lib/rack/content_length.rb:15:in `call' 
    rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service' 
    /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service' 
    /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run' 
    /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread' 


    Rendered /usr/local/rvm/gems/ruby-2.2.1/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_trace.html.erb (2.6ms) 
    Rendered /usr/local/rvm/gems/ruby-2.2.1/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/routing_error.html.erb within rescues/layout (127.3ms) 

Вот маршрут .rb

Rails.application.routes.draw do 

    get 'password_resets/new' 
    get 'password_resets/edit' 

    root 'static_pages#home' 
    get 'history' => 'static_pages#history' 
    get 'help' => 'static_pages#help' 
    get 'contact' => 'static_pages#contact' 
    get 'about' => 'static_pages#about' 
    get 'downloads' => 'static_pages#downloads' 
    get "news" => 'news#news_page' 
    get 'signup' => 'users#new' 
    get 'testpage' => 'static_pages#testpage' 
    get 'delete_inactive_users' => 'users#delete_inactive_users' 

    get 'login' => 'sessions#new' 
    post 'login' => 'sessions#create' 
    delete 'logout' => 'sessions#destroy' 

    resources :users 
    resources :account_activations, only: [:edit] 
    resources :password_resets, only: [:new, :create, :edit, :update] 
    resources :news, only: [:create, :destroy] 
end 

Вот парциальные, содержащий удаления:

<% if @news_feed.any? %> 
    <ol class="news news_feed"> 
    <% @news_feed.each do |news| %> 
     <li id="news-<%= news.id %>"> 
     <aside class="col-md-2"> 
      <span class="news_title"><%= news.news_title %></span> 
     </aside> 
     <span class="news_content"><%= news.content %></span> 
     <span class="user"><%= link_to news.user.name, news.user %></span> 
     <span class="timestamp"> 
      Posted on <%= news.created_at.to_time.strftime('%m/%d/%Y') %> 
      <%= link_to "delete", news, method: :delete, 
          data: { confirm: "Delete this news item?" } %> 
     </span> 
     </li> 
    <% end %> 
    </ol> 
    <%= will_paginate %> 
<% end %> 
+0

Можете вложить файл 'routes.rb' и представить сообщение с вопросом: –

+0

routes.rb и просмотр добавлен. Благодарю. – Evilmuffin

+0

Мне интересно. Должно ли оно вернуть «Начать DELETE»/news/305 «» вместо «Start DELETE» /news.305 «» при успешном удалении? – Evilmuffin

ответ

1

Ok! Я нашел проблему. По-видимому, я не должен называть свою модель «Новости». Потому что это связано с моделью пользователей, и пользователь может has_many News. Он создал конфликт имен, когда я делаю что-то вроде user.news. Вместо этого я воссоздал модель под названием «Newspost», поэтому теперь user.newsposts не будут путать рельсы. Теперь я могу удалить без каких-либо проблем.

2

Попробуйте переходящим в реальной Новости ID:

<%= link_to 'Destroy', { action: :destroy, id: news.id }, 
     method: :delete, 
     data: { confirm: "Delete this news item?" } 
%> 
+0

Это работает! Так что же тогда я сделал не так? – Evilmuffin

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