ruby-on-rails – “调用错误方法时,”nil:NilClass“的”undefined方法“错误

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – “调用错误方法时,”nil:NilClass“的”undefined方法“错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在教自己一些RoR和做教程,但是添加一些更好的布局和引导的东西,我遇到一个我无法想出的问题.

我试图做验证部分(http://guides.rubyonrails.org/getting_started.html#adding-some-validation),但是当我使用:

  1. <% @post.errors.any? %>

我收到这个消息:

  1. undefined method `errors' for nil:NilClass
  2. Extracted source (around line #9):
  3. <legend><h1>Add Post</h1></legend>
  4.  
  5. <%= form_for :post,url: posts_path,html: {class: 'form-horizontal'} do |f| %>
  6. <% if @post.errors.any? %>
  7. <div id="errorExplanation">

没有什么工作,我甚至复制和粘贴教程中的部分.

以下是该视图的代码

  1. <p> </p>
  2.  
  3. <div class="span6"
  4.  
  5. <fieldset>
  6. <legend><h1>Add Post</h1></legend>
  7.  
  8. <%= form_for :post,html: {class: 'form-horizontal'} do |f| %>
  9. <% if @post.errors.any? %>
  10. <div id="errorExplanation">
  11.  
  12. <h2><%= pluralize(@post.errors.count,"error") %> prohibited this post from being saved:</h2>
  13.  
  14. <ul>
  15. <% @post.errors.full_messages.each do |msg| %>
  16. <li><%= msg %></li>
  17. <% end %>
  18. </ul>
  19. </div>
  20. <% end %>
  21. <div class="control-group">
  22. <%= f.label :title,:class => 'control-label' %>
  23. <div class="controls">
  24. <%= f.text_field :title,:class => 'span4' %>
  25. </div>
  26. </div>
  27.  
  28. <div class="control-group">
  29. <%= f.label :content,:class => 'control-label' %>
  30. <div class="controls">
  31. <%= f.text_area :content,:rows => '7',:class => 'input-block-level' %>
  32. </div>
  33. </div>
  34.  
  35. <div class="form-actions">
  36. <%= f.submit "Add Post",:class => 'btn btn-success' %>
  37. <%= link_to "Cancel",posts_path,:class => 'btn',:style => 'float:right;' %>
  38. </div>
  39. <% end %>
  40. </fieldset>
  41.  
  42. </div>

和我的posts_controller:

  1. class PostsController < ApplicationController
  2.  
  3. def new
  4. end
  5.  
  6. def create
  7. @post = Post.new(params[:post].permit(:title,:content))
  8.  
  9. if @post.save
  10. redirect_to @post
  11. else
  12. render 'new'
  13. end
  14. end
  15.  
  16. def show
  17. @post = Post.find(params[:id])
  18. end
  19.  
  20. def index
  21. @posts = Post.order("created_at desc")
  22. end
  23.  
  24. private
  25. def post_params
  26. params.require(:post).permit(:title,:content)
  27. end
  28.  
  29. end

我失踪了什么提前致谢!

解决方法

您还需要在新操作中定义@post.
  1. def new
  2. @post = Post.new
  3. end

你得到NilClass错误,因为@post没有值(它是零),当你第一次加载表单在新的动作.

当您执行渲染时:创建操作中的新内容没有问题,因为它使用您在创建顶部定义的@post.

猜你在找的Ruby相关文章