我得到了以下错误:
没有路由匹配{:action=>“显示”,:controller=>“项目”,:id=>nil}缺少必需的键::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发布于 2014-07-17 06:41:10
如果你看看你的问题
<%= form_for :article, url: article_path(@article), method: :patch do |f| %>检查您的url: article_path(@文章),这是文章显示操作的路径助手,如果您检查您的rake路由,它为显示操作显示,您需要一个get请求,但是您正在使用patch方法,或者如果您试图编辑一篇文章,那么您的路径助手是错误的,因此没有路由错误。
Fix
显示一篇文章:
如果您想要显示一篇文章,那么就不用使用默认使用get请求的form_for use link_to,而是使用form_for来创建文章,而不是显示文章。
<%= link_to "Article", articles_path(@article) %>创建或编辑文章的:
a.使用多态urls的
如果您想要创建一篇文章或编辑一篇文章,那么您可以使用rails多态url ,并且不需要指定url选项,rails将在内部处理这个问题。因此,要创建和编辑一篇文章,可以使用相同的表单。
<%= form_for @article do |f| %>
// your fields
<% end %>要使它工作,您需要在您的控制器中有这个
def new
@article = Article.new
end
def edit
@article = Article.find(params[:id])
endb.使用 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 %>https://stackoverflow.com/questions/24796104
复制相似问题