没有路线匹配{:action =>"编辑",:controller =>"博客"}

时间:2014-05-09 19:38:29

标签: ruby-on-rails actioncontroller

我在这里做了一些愚蠢的错事,但我不知道它是什么。

在我看来,我有以下代码:

- if current_page?(edit_blog_path)

我用它来显示页面中的某些页面特定功能。

这会导致以下错误:

ActionController::RoutingError - No route matches {:action=>"edit", :controller=>"blogs"}:
  actionpack (3.2.16) lib/action_dispatch/routing/route_set.rb:540:in `raise_routing_error'
  actionpack (3.2.16) lib/action_dispatch/routing/route_set.rb:536:in `rescue in generate'
  actionpack (3.2.16) lib/action_dispatch/routing/route_set.rb:528:in `generate'
  actionpack (3.2.16) lib/action_dispatch/routing/route_set.rb:569:in `generate'
  actionpack (3.2.16) lib/action_dispatch/routing/route_set.rb:594:in `url_for'
  actionpack (3.2.16) lib/action_dispatch/routing/url_for.rb:148:in `url_for'
  actionpack (3.2.16) lib/action_view/helpers/url_helper.rb:107:in `url_for'

我的佣金路线说:

 % rake routes | grep blog
              blogs GET    /blogs(.:format)                 blogs#index
                     POST   /blogs(.:format)                 blogs#create
           new_blog GET    /blogs/new(.:format)             blogs#new
          edit_blog GET    /blogs/:id/edit(.:format)        blogs#edit
               blog GET    /blogs/:id(.:format)             blogs#show
                     PUT    /blogs/:id(.:format)             blogs#update
                     DELETE /blogs/:id(.:format)             blogs#destroy
          blogs_new POST   /blogs/new(.:format)             blogs#new
                     GET    /blogs/:id/next(.:format)        blogs#next
                     GET    /blogs/:id/previous(.:format)    blogs#previous
           user_root GET    /blog/root(.:format)             blogs#root

任何线索?

感谢。

3 个答案:

答案 0 :(得分:4)

edit_blog_path需要博客作为参数。

例如

edit_blog_path(@blog)

如果你只是想检查一下,无论你是否在edit_blog页面,而不关心正在编辑哪个博客,你可以做这样的事情。

if controller_name == 'blogs' && action_name == 'edit'

如果您只想区分新表单和编辑表单,也可以

if @blog.persisted?
  # existing blog

答案 1 :(得分:1)

你需要传递id之类的

if current_page?(edit_blog_path(id: @blog.id))

或传递整个博客对象

if current_page?(edit_blog_path(@blog))

答案 2 :(得分:0)

我说路由助手edit_blog_path需要一个id。也许edit_blog_path(@blog)可能有效(或用你在那里的变量替换@blog)?