我是Rails 3的新手,我已经按照一些教程进行操作,现在我正在尝试使用创建的代码“玩”。我已经按照http://guides.rubyonrails.org/getting_started.html
的教程进行了操作我正在尝试使用以下代码在主页上为新帖子呈现表单:
<%= 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 :(得分:5)
@post变量未在Controller中实例化:)
所以控制器动作中的"@post = Post.new"
应该可以解决问题
答案 1 :(得分:1)
Rails正在尝试为对象@post
构建表单。为了做到这一点,它需要知道什么类型的对象@post
;这样,它可以找到对象中的任何现有数据并将其填入表单中。 Rails将一个方法移植到名为model_name
的对象上进行查找,但不会将其移植到NilClass
(nil
对象的类)上。
我怀疑你没有在任何地方定义@post
- 它是Controller的一个实例变量,所以你希望控制器从数据库中找到@post
,或者调用{{ 1}} - 所以它是@post = Post.new
。
答案 2 :(得分:0)
在帖子/ _form.html.erb中,
变化
<%= form_for(@post) do |f| %>
到
<%= form_for(Post.new) do |f| %>