0

我正在通過導軌「入門」教程的方式工作,而且我被困在引入偏見的地步。出於某種原因,從new.html.erb渲染時,partial不起作用,儘管它在從edit.html.erb渲染時工作。當點擊「新建」去的new.html.erb,我發現了以下錯誤:Rails快速入門教程部分不要爲新博客文章工作

錯誤:

「的形式第一個參數不能包含零或爲空」 的第一線在以下的部分:

_form.html.erb:

<%= form_for @post do |f| %> 
<% if @post.errors.any? %> 
<div id="error_explanation"> 
    <h2><%= pluralize(@post.errors.count, "error") %> prohibited 
     this article from being saved:</h2> 
    <ul> 
     <% @post.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
    </ul> 
</div> 
<% end %> 
<p> 
    <%= f.label :title %><br/> 
    <%= f.text_field :title %> 
</p> 

<p> 
    <%= f.label :text %><br/> 
    <%= f.textarea :text %> 

</p> 

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

new.html.erb:

<h1>New Post</h1> 

<%= render 'form' %> 

<%= link_to 'Back', posts_path %> 

edit.html.erb:

<h1>Edit post</h1> 

<%= render 'form' %> 

<%= link_to 'Back', posts_path %> 

posts_controller.rb:

... 
    def new 
    end 
    ... 
    def edit 
    @post = Post.find(params[:id]) 
    end 

    def update 
    @post = Post.find(params[:id]) 

    if @post.update(post_params) 
     redirect_to @post 
    else 
     render 'edit' 
    end 
    end 
    ... 

它看起來好像new.html.erb不知道該@post變量,如果它是一個新的崗位。原來new.html.erb是這樣的:

<h1>New Post</h1> 

    <%= form_for :post, url: posts_path do |f| %>   
    ... 

...比使用符號而不是@post等,這是等同於局部形式。

任何想法?

+1

在'PostsController'中顯示'new'動作。 –

+0

ahnnnd ...有答案...新的沒有參考文章... – GLaDOS

回答

2

您沒有在您的Posts#new操作中設置@post實例變量(這就是爲什麼它是nil)。您應該有:

def new 
    @post = Post.new 
end 

在您的PostsController