首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails: Form_for:没有匹配的路由{:action=>"show",:controller=>"posts"}缺少必需的键:[:id]

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

Stack Overflow用户
提问于 2017-09-14 06:16:51
回答 2查看 263关注 0票数 0

我是一个全新的RoR新手,正在尝试建立一个简单的博客,但已经被“添加帖子”功能卡住了。

加载.../posts/new时弹出以下错误消息

代码语言:javascript
运行
复制
No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]

下面是我的post控制器的样子:

代码语言:javascript
运行
复制
class PostsController < ApplicationController
def index 
end

def new 
end

def create 
    render plain: params[:post].inspect
end

结束

下面是我的new.html.erb的样子:

代码语言:javascript
运行
复制
<h1>Add Post</h1>
<%= form_for :post, url: posts_path do |f| %>
<p>
    <%= f.label :title %><br>
    <%= f.text_field :title %>
</p>

<p>
    <%= f.label :body %><br>
    <%= f.text_area :body %>
</p>

<p>
    <%= f.submit %>
</p>
<% end %>

我已经在我的路线中设置了帖子作为资源。令人惊讶的是,在我朋友的笔记本电脑上,代码可以正常工作。

我很乐意接受任何建议,并为这个愚蠢的问题道歉。

EN

回答 2

Stack Overflow用户

发布于 2017-09-14 06:23:50

使用以下工具检查您的路由:

代码语言:javascript
运行
复制
$rake routes

您将看到带有id的posts_path用于更新"post“,而不是创建一个"post”,您还将找到要创建新“post”的路径。

您可能会说:但我没有更新操作。如果在路由文件中使用了resources关键字,即使缺少操作本身也是如此。

更新:删除

代码语言:javascript
运行
复制
url: post_path

从您的form_for调用

我的建议是,看看rails guides on routing吧。

票数 0
EN

Stack Overflow用户

发布于 2017-09-14 06:30:29

form_for帮助器正在寻找要操作的资源对象,而您给了它一个符号。我怀疑它假设这是一个动作URL,并将该符号转换(或尝试)为路由。

new操作中使用form_for,模式通常是创建一个新资源并将其提供给form_for帮助器:

代码语言:javascript
运行
复制
def new
  @post = Post.new
end
代码语言:javascript
运行
复制
<%= form_for @post, url: posts_path do |f| %>
  ...
<% end %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46207625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档