Ruby on rails ActionController::RoutingError没有与之匹配的路由[DELETE]
我正在写一个显示新闻提要的页面,在删除帖子时遇到了问题。当我试图删除某个帖子时,它会给我一个错误: ActionController::RoutingError(没有与[DELETE]匹配的路由“/news.305”): 例如(305是id) 我做错了什么 这是我的新闻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
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?" }
%>