2011-04-07 197 views
3

我对Rails 3非常陌生,并且我遵循了一些教程,现在我试图用创建的代码“玩”。我遵循了http://guides.rubyonrails.org/getting_started.htmlRails 3渲染/部分

我正在试图渲染主页上的新帖这个代码的形式教程:

<%= render :partial => "posts/form" %> 

的职位/ _form.html.erb看起来是这样的:

<%= form_for(@post) do |f| %> 
    <% if @post.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> 

     <ul> 
     <% @post.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

,这是错误我得到:

undefined method `model_name' for NilClass:Class 
Extracted source (around line #1): 

1: <%= form_for(@post) do |f| %> 
2: <% if @post.errors.any? %> 
3:  <div id="error_explanation"> 
4:  <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> 
Trace of template inclusion: app/views/home/index.html.erb 

Rails.root: d:/server/cazare 

Application Trace | Framework Trace | Full Trace 
app/views/posts/_form.html.erb:1:in `_app_views_posts__form_html_erb___794893824_70478136_519766' 
app/views/home/index.html.erb:5:in `_app_views_home_index_html_erb__967672939_70487520_0' 

我明白,这对于你们中的一些人来说似乎是小菜一碟,但我试图理解Rails上的一切工作原理,所以我希望你能理解我。

在此先感谢!

+0

您是否收到错误或者是什么问题? – Wukerplank 2011-04-07 08:16:00

+0

那段代码(对'model_name'的调用)在你发布的代码中没有任何地方。您需要查看错误,因为它应该为您提供文件名和行号,并发布该代码段,并具体告诉我们发生了什么行。 – 2011-04-07 08:17:31

+0

我更新了错误信息。抱歉没有发布在第一个地方。 – 2011-04-07 08:18:08

回答

5

@post变量并没有在控制器:)

所以"@post = Post.new"控制器动作应做的伎俩

1

Rails正试图为对象@post构建表单。为了做到这一点,它需要知道什么样的对象@post是;这样,它可以找到对象中的任何现有数据并将其填充到表单中。 Rails有一种方法嫁接到名为model_name的对象上进行查找,但它不会嫁接到NilClassnil对象的类)上。

我怀疑你还没有定义任何地方@post - 这是控制器的一个实例变量,所以你所期望的控制器无论是从数据库中找到@post,或致电@post = Post.new - 所以它的nil

+0

我终于明白了,好吧,我不知道现在如何工作,但你说得对,我没有在我的home#index控制器中定义@post。 – 2011-04-07 08:33:03

0

在帖子/ _form.html.erb内实例化,

变化

<%= form_for(@post) do |f| %> 

<%= form_for(Post.new) do |f| %>