我目前正在教自己一些RoR和做教程,但是添加一些更好的布局和引导的东西,我遇到一个我无法想出的问题.
我试图做验证部分(http://guides.rubyonrails.org/getting_started.html#adding-some-validation),但是当我使用:
- <% @post.errors.any? %>
我收到这个消息:
- undefined method `errors' for nil:NilClass
- Extracted source (around line #9):
- <legend><h1>Add Post</h1></legend>
- <%= form_for :post,url: posts_path,html: {class: 'form-horizontal'} do |f| %>
- <% if @post.errors.any? %>
- <div id="errorExplanation">
没有什么工作,我甚至复制和粘贴教程中的部分.
以下是该视图的代码:
- <p> </p>
- <div class="span6"
- <fieldset>
- <legend><h1>Add Post</h1></legend>
- <%= form_for :post,html: {class: 'form-horizontal'} do |f| %>
- <% if @post.errors.any? %>
- <div id="errorExplanation">
- <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="control-group">
- <%= f.label :title,:class => 'control-label' %>
- <div class="controls">
- <%= f.text_field :title,:class => 'span4' %>
- </div>
- </div>
- <div class="control-group">
- <%= f.label :content,:class => 'control-label' %>
- <div class="controls">
- <%= f.text_area :content,:rows => '7',:class => 'input-block-level' %>
- </div>
- </div>
- <div class="form-actions">
- <%= f.submit "Add Post",:class => 'btn btn-success' %>
- <%= link_to "Cancel",posts_path,:class => 'btn',:style => 'float:right;' %>
- </div>
- <% end %>
- </fieldset>
- </div>
和我的posts_controller:
- class PostsController < ApplicationController
- def new
- end
- def create
- @post = Post.new(params[:post].permit(:title,:content))
- if @post.save
- redirect_to @post
- else
- render 'new'
- end
- end
- def show
- @post = Post.find(params[:id])
- end
- def index
- @posts = Post.order("created_at desc")
- end
- private
- def post_params
- params.require(:post).permit(:title,:content)
- end
- end
我失踪了什么提前致谢!