Blog#new中的ActionController :: UrlGenerationError

时间:2017-01-02 21:26:27

标签: ruby-on-rails

我在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属性时,错误没有显示,但显然它不起作用,因为或形成目标。我在项目中有一些其他文件,但我认为它们对于这个问题并不重要。

1 个答案:

答案 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 %>

希望这会对你有所帮助。