我是RoR的新手并且正在尝试构建一个简单的博客,但已经陷入了“添加帖子”功能。
加载.../posts/new
时会弹出以下错误消息:
No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]
这是我的帖子控制器的样子:
class PostsController < ApplicationController
def index
end
def new
end
def create
render plain: params[:post].inspect
end
端
以下是我new.html.erb
的样子:
<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 %>
我已将帖子设置为路线中的资源。令人惊讶的是,在我朋友的笔记本电脑上,代码可以工作。
我会对任何建议感到高兴,并为这个愚蠢的问题道歉。
答案 0 :(得分:0)
检查您的路线:
$rake routes
你会看到带有id的posts_path用于更新“帖子”而不是创建一个,你也会找到你想要创建一个新“帖子”的路径。
您可能会说:但我没有更新操作。如果在您的路径文件中使用了您使用的资源关键字,即使操作本身丢失了。
更新:
删除url: post_path
来自您的form_for电话
我的建议,请查看rails guides on routing。
答案 1 :(得分:0)
form_for
帮助器正在寻找要操作的资源对象,并且您给它一个符号。我怀疑它假定这是一个动作URL,并将该符号转换(或尝试)到路线中。
在form_for
操作中使用new
,模式通常是创建新资源并将其提供给form_for
帮助程序:
def new
@post = Post.new
end
<%= form_for @post, url: posts_path do |f| %>
...
<% end %>