【问题标题】:ActionController::UrlGenerationError in Articles#editActionController::UrlGenerationError in Articles#edit
【发布时间】:2014-07-17 06:14:04
【问题描述】:

我收到以下错误:

没有路由匹配 {:action=>"show", :controller=>"articles", :id=>nil} 缺少必需的键:[:id]

以下是显示错误的代码。

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

这是什么错误,每当我从上一屏点击编辑时,我想我正在发送文章 ID。

这是我的 rake 路由输出

     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

【问题讨论】:

  • 你能发布你的rake routes 输出吗?
  • 我现在已经在问题本身中包含了 rake 路由输出
  • 当您将该行更改为 &lt;%= form_for @article, url: article_path(@article), method: :patch do |f| %&gt; 时会发生什么?
  • 当我按照演练过程使用 Ruby 和 rails guides.rubyonrails.org/getting_started.html 时产生了这个错误。可能需要更新文档?这令人困惑。任何有正确解决方案的人请帮忙。
  • 原来我错过了编辑功能。 def edit @article = Article.find(params[:id]) end 如果有人遇到同样的错误。请不要忘记添加编辑方法。

标签: ruby-on-rails ruby


【解决方案1】:

如果你看看你的问题

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

检查您的 url:article_path(@article) 这是您的文章显示操作的路径助手,如果您检查您的 rake 路由,它表示显示操作您需要 get 请求,但您使用的是 patch 方法或者如果您正在尝试编辑文章,那么您的路径助手是错误的,因此 no route error

修复

显示文章:

如果你想显示一篇文章,那么 form_for 用于创建文章而不是显示文章,而不是 form_for 使用 link_to,默认情况下使用 get 请求强>

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

创建或编辑文章:

一个。 使用多态网址

如果你想创建一篇文章或编辑一篇文章,那么你可以使用 rails 多态 urls 并且不需要指定 url 选项,rails 会在内部处理这个。因此,对于创建和编辑文章,您可以使用相同的表单

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

要让它工作,你需要在你的控制器中拥有它

def new
  @article = Article.new
end

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

b. 使用 path_helpers

如果您在表单中硬编码 url 选项,那么它只会带您执行该操作,因此您需要单独的表单

用于创作:

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

用于编辑:

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

【讨论】:

  • 我遇到了这个确切的问题,尝试使用多态 url 和 path_helpers 来编辑文章并没有帮助。 path_helpers 会出现同样的错误,而多态 url 会出现 ArgumentError。本素材来自this rails tutorial。我不确定 Stack Overflow 的最佳做法是否能解决老问题,但我想我会在发表新帖子之前发表评论。
  • 原来我是个白痴,没有注意到带有def edit... 的代码,这是我所缺少的。忽略上面的评论。
  • @user1489726 没问题。很高兴听到你让它工作了:)
猜你喜欢
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多