2014-07-17 47 views
10

我收到以下错误:的ActionController :: UrlGenerationError在文章#编辑

没有路由匹配{:动作=> “秀”,:控制器=> “文章”,:ID =>零}缺少必需的键:[:id]

以下是显示错误的代码。

<%= form_for :article, url: article_path(@article), method: :patch do |f| %> 

什么是这个错误,每当我点击从前一屏幕编辑,我想我发送文章ID。

这里是我的耙路输出

 Prefix Verb URI Pattern     Controller#Action 
welcome_index GET /welcome/index(.:format)  welcome#index 
    articles GET /articles(.:format)   articles#index 
       POST /articles(.:format)   articles#create 
    new_article GET /articles/new(.:format)  articles#new 
edit_article GET /articles/:id/edit(.:format) articles#edit 
     article GET /articles/:id(.:format)  articles#show 
       PATCH /articles/:id(.:format)  articles#update 
       PUT /articles/:id(.:format)  articles#update 
       DELETE /articles/:id(.:format)  articles#destroy 
     root GET /       welcome#index 
+0

你可以发布你的'rake routes'输出吗? – Pavan

+0

我已经在问题本身中包含了rake路由输出 – user3726986

+0

当您将该行更改为'<%= form_for @article,url:article_path(@article),method :: patch do | f |时,会发生什么? %>'? – Pavan

回答

5

如果你看一下你的问题

<%= form_for :article, url: article_path(@article), method: :patch do |f| %> 

检查网址:article_path(@article)这是你的文章显示的行动路径和助手如果您检查您的耙路线它说为显示操作,您需要一个get请求,但您使用的是一个patch方法,或者如果您正在尝试编辑一篇文章,那么您的路径助手是错误的,因此没有路由错误

修复

要显示的文章:

如果你想显示的文章则代替的form_for使用的link_to它默认使用GET请求的,的form_for是用于制作文章而不用于展示文章

<%= link_to "Article", articles_path(@article) %> 

创建或编辑文章:

a。 使用多态的URL

如果你想创建一个文章或编辑的文章,那么你可以使用轨多态性网址,并不需要指定网址选项,轨道将在内部处理这个问题。因此,用于创建和编辑了一篇文章,你可以用同样的形式

<%= form_for @article do |f| %> 
    // your fields 
<% end %> 

对于这个工作,你需要有这个在您的控制器

def new 
    @article = Article.new 
end 

def edit 
    @article = Article.find(params[:id]) 
end 

使用path_helpers

如果你在你的形式硬编码的网址选项,那么它会带你到那个动作只,因此你会需要单独的形式

为了创建:

<%= form_for :article, url: article_path do |f| %> 
    // your fields 
<% end %> 

编辑:

<%= form_for :article, url: article_path(@article) do |f| %> 
    // your fields 
<% end %> 
+0

我有这个确切的问题,并尝试编辑一篇文章多态urls和path_helpers没有帮助。 path_helpers出现同样的错误,ArgumentError出现多态url。此材料来自[本教程教程](http://guides.rubyonrails.org/getting_started.html#updating-articles)。我不确定堆栈溢出最佳实践是为了恢复一个老问题,但我想在发表一篇新文章之前留言。 –

+1

原来我是个白痴,没有注意到'''def编辑...''''''''''''''''''''''''''这是我错过的代码。忽略上面的评论。 –

+0

@ user1489726没有问题。很高兴听到你的工作:) – Mandeep

相关问题