【问题标题】:'No route matches' Error on Delete of Micropost in Chapter 11 of Hartl's ruby-on-rails tutorial - completely stumped在 Hartl 的 ruby​​-on-rails 教程的第 11 章中删除 Micropost 时出现“没有路线匹配”错误 - 完全被难住了
【发布时间】:2011-05-03 15:27:40
【问题描述】:

我正在尝试通过 Michael Hartl 的 ROR 教程找出一个特别难以捉摸的错误。

当点击微博的“删除”(从主页或用户/显示页面)时,url 是http://localhost:3000/microposts/303,但结果是“路由错误 - 没有路由匹配”/microposts/303”。

我浏览了涉及的代码的每一页,并将它们替换为来自 Hartl 的 gitHub 项目站点的代码。 https://github.com/railstutorial/sample_app。例如,对于 microposts_controller,我从 gitHub 仓库复制了代码,并用复制的代码替换了我的代码。然后我重新启动了服务器。结果相同。然后我回到我的代码来测试下一页。

我交换代码的页面是

控制器 microposts_controller users_controller(显示方法)

型号 micropost.rb (模型)

视图 microposts/_micropost.haml 共享/_micropost_form.html.haml 共享/_feed.haml shared/_feed_item.haml

还有 Routes 文件。

我不知道要检查其他事情。有人有什么建议吗?

谢谢,

戴夫

rake 路由的结果

 sessions POST   /sessions(.:format)       {:action=>"create", :controller=>"sessions"}
new_session GET    /sessions/new(.:format)   {:action=>"new", :controller=>"sessions"}
    session DELETE /sessions/:id(.:format)   {:action=>"destroy", :controller=>"sessions"}
     signin        /signin(.:format)         {:controller=>"sessions", :action=>"new"}
    signout        /signout(.:format)        {:controller=>"sessions", :action=>"destroy"}
 microposts POST   /microposts(.:format)     {:action=>"create", :controller=>"microposts"}
  micropost DELETE /microposts/:id(.:format) {:action=>"destroy", :controller=>"microposts"}
       root        /(.:format)               {:controller=>"pages", :action=>"home"}
    contact        /contact(.:format)        {:controller=>"pages", :action=>"contact"}
      about        /about(.:format)          {:controller=>"pages", :action=>"about"}
       help        /help(.:format)           {:controller=>"pages", :action=>"help"}
     signup        /signup(.:format)         {:controller=>"users", :action=>"new"}
development        /development(.:format)    {:controller=>"pages", :action=>"development"}
                   /signup(.:format)         {:controller=>"users", :action=>"new"}
      users GET    /users(.:format)          {:action=>"index", :controller=>"users"}
            POST   /users(.:format)          {:action=>"create", :controller=>"users"}
   new_user GET    /users/new(.:format)      {:action=>"new", :controller=>"users"}
  edit_user GET    /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
       user GET    /users/:id(.:format)      {:action=>"show", :controller=>"users"}
            PUT    /users/:id(.:format)      {:action=>"update", :controller=>"users"}
            DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"}

Routes.rb 文件是

SampleApp::Application.routes.draw do

#Sign in Routes
  resources :sessions, :only => [:new, :create, :destroy]
  match '/signin', :to => 'sessions#new'
  match '/signout', :to => 'sessions#destroy'

#Microposts Routes
  resources :microposts, :only => [:create, :destroy]


#Pages Routes
  root :to => "pages#home"

  match '/contact', :to => 'pages#contact'
  match '/about',   :to => 'pages#about'
  match '/help',    :to => 'pages#help'
  match '/signup',  :to => 'users#new'
  match '/development', :to => 'pages#development'

#Users Routes
  match '/signup',  :to => 'users#new'
  resources :users

end

但是,正如我所说,即使用 gitHub 上的路由文件替换我的路由文件也不能解决问题。

要删除的链接是

 = link_to "delete", micropost, :method => :delete,
                                      :confirm => "You sure?",
                                      :title => micropost.content

【问题讨论】:

  • 包含与微博相关的 routes.rb 文件的内容。然后运行rake routes 并发布您的输出,以便我们帮助您调试。
  • 如何生成要删除的链接? rake routes 的输出是什么?
  • 这可能是由于路由文件的某些更改引起的,您能否提供您在 route.rb 中更改的代码
  • 对不起,我刚刚掌握了发布到 stackoverflow 的窍门。我通过编辑原始问题发布了答案。
  • @humbledaisy - 发布您用来生成链接的代码,就像 Andrew 要求的那样。我感觉您没有生成正确的 http 方法,因为其他一切似乎都是正确的。

标签: ruby-on-rails routing


【解决方案1】:

link_to :method => :delete 使用不显眼的 javascript 创建 DELETE 请求。我的猜测是您的项目中没有必要的 javascript 文件(prototype.js/jquery.js 和 rails.js),或者您没有将它们包含在您的布局中。

【讨论】:

  • 谢谢@Austin,不幸的是,不是这样。 prototype.js 和 rails.js 都在加载中。
  • Ooohhh @Austin,不过你肯定是在做某事。我也在加载jquery。我测试了评论 jquery ,它工作。切换顺序也有效。知道为什么吗?
  • @humbledaisy 如果您尝试在同一个项目中同时使用 jQuery 和 Prototype,您将不得不将 jQuery 置于兼容模式,因为它们在 $ 函数上发生冲突。见这里:docs.jquery.com/Using_jQuery_with_Other_Libraries
  • 我也忽略了谢谢@Austin。非常感谢!!
  • @humbledaisy 如果你只是想在 Rails 中使用 jQuery,你可以获取 jQuery 版本的 rails.js (github.com/rails/jquery-ujs) 并完全移除 Prototype。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
相关资源
最近更新 更多