我在Ruby on Rails应用程序中制作,就像官方指南中的那样。我创建了模型Post,我在app / views / new.html.erb中创建了form_for,就像这样
ActionController::UrlGenerationError in Blog#new
Showing <some folders>/hello_world/app/views/blog/new.html.erb where line #1 raised:
No route matches {:action=>"show", :controller=>"blog"} missing required keys: [:id]
Extracted source (around line #1):
<%= form_for :blog, url: blog_path do |f| %>
但我正在回复错误
Rails.application.routes.draw do
resources :users
resources :blog
end
我不知道为什么会发生这种情况,因为我的路线看起来正确。我的路线档案:
class BlogController < ApplicationController
def index
@posts = Post.all
end
def new
end
private
def post_params
params.require(:blog).permit(:title, :text)
end
end
这是我的blog_controller:
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
我添加了
a
但它没有帮助
当我从form_for(&#34; url:blog_path&#34;)中删除url属性时,错误没有显示,但显然它不起作用,因为或形成目标。我在项目中有一些其他文件,但我认为它们对于这个问题并不重要。
答案 0 :(得分:0)
在控制器中修改新的方法代码,如下所示
def new
@blog = Blog.new
end
然后按以下方式更改表单
<%= form_for @blog, url: {action: "create"} do |f| %>
<p>
<%= f.label :title %>
<%= f.text_field :title %>
#some other stuff
<%= f.submit %>
<% end %>
或者只是您可以在表单中创建一个对象
<%= form_for Blog.new do, url: {action: "create"} |f| %>
<p>
<%= f.label :title %>
<%= f.text_field :title %>
#some other stuff
<%= f.submit %>
<% end %>
希望这会对你有所帮助。