【发布时间】:2015-01-21 15:05:10
【问题描述】:
我正在编写 Michael Hartl 的 Ruby on Rails 教程(我是菜鸟)。
在应用程序中我想删除一条微博,但每当我尝试在浏览器中执行它时,它都会告诉我存在路由错误。 "没有路线匹配 [GET] "/microposts/3"
这是我在 _micropost.html.erb 中的代码
<tr>
<td class="micropost">
<span class="content"><%= micropost.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(micropost.created_at) %> ago
</span>
</td>
<% if current_user?(micropost.user) %>
<td>
<%= link_to "delete", micropost, :method => :delete,
:confirm => "You sure?",
:title => micropost.content %>
</td>
<% end %>
</tr>
</tr>
我已经有了根据书本伪造请求的 Javascript 代码
<head>
<title><%= title %></title>
<%= csrf_meta_tag %>
<%= render 'layouts/stylesheets' %>
<%= javascript_include_tag :all %>
</head>
这是我的路线的一部分。rb
Rails.application.routes.draw do
get 'sessions/new'
resources :users
resources :sessions, :only => [:new, :create, :destroy]
resources :microposts, :only => [:create, :destroy]
match '/signup', :to => 'users#new', via: [:get, :post]
match '/signin', :to => 'sessions#new', via: [:get, :post]
match '/signout', :to => 'sessions#destroy', via: [:get, :post]
match '/contact', :to => 'pages#contact', via: [:get, :post]
match '/about', :to => 'pages#about', via: [:get, :post]
match '/help', :to => 'pages#help', via: [:get, :post]
match '/:id', :to => 'users#show', via: [:get, :post]
root :to => 'pages#home'
这里是 application.js
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
还有 micropost_controller.rb
class MicropostsController < ApplicationController
before_filter :authenticate, :only => [:create, :destroy]
before_filter :authorized_user, :only => :destroy
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_path
else
@feed_items = []
render 'pages/home'
end
end
def destroy
@micropost.destroy
redirect_back_or root_path
end
private
def micropost_params
params.require(:micropost).permit(:content)
end
def authorized_user
@micropost = Micropost.find(params[:id])
redirect_to root_path unless current_user?(@micropost.user)
end
end
我已经建立了这个答案,但“button_to”方法似乎无法解决我的问题:Delete link sends "Get" instead of "Delete" in Rails 3 view
非常感谢您的任何回答。
【问题讨论】:
-
MicropostsController中有方法destroy吗? -
你的控制器代码是什么样的?您是否尝试过使用
logger.info "abcde"添加日志记录以查看发生了什么?在将请求重定向到其他地方之前,该请求可能会到达控制器。另外,我不确定为什么 Javascript 在这里有任何相关性? -
粘贴你的控制器方法。看起来您正在尝试在销毁后进行渲染。
-
我刚刚粘贴了 MicropostController。
-
嗯...我最初认为这可能是控制器问题,但您在此处发布的所有内容似乎都很好。我想说@glyuck 给出的答案可能是正确的——确保你的浏览器中启用了 Javascript(不要忘记 NoScript 等扩展!)并检查你的浏览器控制台是否有错误。在大多数浏览器中,您可以通过按 F12 来查看控制台 - 请注意,如果您在导航到页面后打开控制台,您可能需要按 F5 刷新才能看到任何内容。
标签: javascript ruby-on-rails ruby ruby-on-rails-4