Ruby on rails ActionController::RoutingError没有与之匹配的路由[DELETE]

Ruby on rails ActionController::RoutingError没有与之匹配的路由[DELETE],ruby-on-rails,actioncontroller,Ruby On Rails,Actioncontroller,我正在写一个显示新闻提要的页面,在删除帖子时遇到了问题。当我试图删除某个帖子时,它会给我一个错误: ActionController::RoutingError(没有与[DELETE]匹配的路由“/news.305”): 例如(305是id) 我做错了什么 这是我的新闻 class NewsController < ApplicationController before_action :logged_in_user, only: [:create, :destroy] befor

我正在写一个显示新闻提要的页面,在删除帖子时遇到了问题。当我试图删除某个帖子时,它会给我一个错误:

ActionController::RoutingError(没有与[DELETE]匹配的路由“/news.305”):

例如(305是id)

我做错了什么

这是我的新闻

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
以下是完整的错误代码:

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)
这是路线

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 %>


  • 尝试传入实际的新闻id:

    <%= link_to 'Destroy',  { action: :destroy, id: news.id }, 
           method: :delete,
           data: { confirm: "Delete this news item?" } 
    %>
    
    
    
    好的!我发现了问题。显然,我不应该给我的模特取名为“新闻”。因为它链接到用户模型,用户可以有很多新闻。当我执行类似user.news的操作时,会产生名称冲突。我重新创建了一个名为“Newspost”的模型,所以现在user.Newspost不会混淆rails。现在我可以做删除没有任何问题

    是否可以包括
    routes.rb
    文件和显示错误的视图?routes.rb和视图已添加。谢谢,我想知道。成功删除时是否应返回“已启动删除”//news/305”,而不是“已启动删除”//news.305”?@Evilmuffin yes。当然应该是
    /news/305
    问题是为什么不是?
    <%= link_to 'Destroy',  { action: :destroy, id: news.id }, 
           method: :delete,
           data: { confirm: "Delete this news item?" } 
    %>