ruby-on-rails erb

ruby on rails - “Métodos ''errores'' indefinidos para nil: NilClass” al llamar al método de errores



ruby-on-rails erb (2)

Actualice el método de creación en el archivo posts.controller.rb con el siguiente fragmento de código. Funciono para mi

def create @post = Post.new(params[:post].permit(:title, :text)) @post.save redirect_to @post end

Actualmente me estoy enseñando algo de RoR y haciendo el tutorial, pero agregando un diseño y cosas más bonitas con bootstrap y me estoy topando con un problema que no puedo resolver.

Estoy tratando de hacer la parte de validación ( http://guides.rubyonrails.org/getting_started.html#adding-some-validation ), pero cuando uso:

<% @post.errors.any? %>

Recibo este mensaje:

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">

Nada funciona e incluso copié y pegué las partes del tutorial.

Aquí está el código para la vista:

<p> </p> <div class="span6" <fieldset> <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"> <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>

Y mi 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

¿Qué me estoy perdiendo? ¡Gracias por adelantado!


También necesitas definir @post en tu new acción.

def new @post = Post.new end

Recibirá el error NilClass porque @post no tiene ningún valor (es nil ) cuando carga el formulario por primera vez en la new acción.

Cuando haces el render :new en tu acción de create , no hay problema porque usa el @post que definiste en la parte superior de create .