tutorial software rails ejemplos descargar curso caracteristicas ruby-on-rails

ruby-on-rails - software - ruby on rails tutorial



"Undefined method` title ''para nil: NilClass "Tutorial de guĂ­as Rails (8)

El tutorial tiene un error tipográfico entonces, porque seguí estos mismos pasos y resolví el mismo problema. Sin embargo, estaba siguiendo el tutorial.

def create @post = Post.new(post_params) @post.save redirect_to @post end private def post_params params.require(:post).permit(:title, :text) end

Estoy trabajando en RailsGuides Tutorial (creando una aplicación de blog). Cuando ejecuto el servidor y abro: /posts/new todo se ve bien. Pero cuando intento crear una publicación, aparece este error:

NoMethodError en Publicaciones # show

Mostrando /home/darek/rails_projects/blog/app/views/posts/show.html.erb donde se levantó la línea # 3:

método indefinido `title ''para nil: NilClass

Fuente extraída (alrededor de la línea # 3):

1 <p> 2 <strong>Title:</strong> 3 <%= @post.title %> 4 </p> 5 <p>

De hecho, se creó la publicación y puedo ver el título y el contenido en / posts. Pero cuando intento utilizar la publicación específica, aparece este error. Mi primera pista fue cambiar de línea.

<%= @post.title %>

a

<%= @post.try(:title) %>

El error se ha ido, pero el problema no se resuelve.
Cuando intento mostrar publicaciones específicas, obtengo los formularios Título y Texto vacíos. No es lo que quiero ver;)

Ok, aquí está el código

Mostrar.html.erb

<p> <strong>Title:</strong> <%= @post.title %> </p> <p> <strong>Text:</strong> <%= @post.text %> </p> <h2>Add a comment:</h2> <%= form_for([@post, @post.comments.build]) do |f| %> <p> <%= f.label :commenter %><br /> <%= f.text_field :commenter %> </p> <p> <%= f.label :body %><br /> <%= f.text_area :body %> </p> <p> <%= f.submit %> </p> <% end %> <%= link_to ''Edit Post'', edit_post_path(@post) %> | <%= link_to ''Back to Posts'', posts_path %>

Posts_controller.rb

class PostsController < ApplicationController def new @post = Post.new end def index @posts = Post.all end def create @post = Post.new(params[:post].permit(:title, :text)) if @post.save redirect_to @post else render ''new'' end end private def post_params params.require(:post).permit(:title, :text) end def show @post = Post.find(params[:id]) end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) if @post.update(params[:post].permit(:title, :text)) redirect_to @post else render ''edit'' end end def destroy @post = Post.find(params[:id]) @post.destroy redirect_to posts_path end end

Rutas de Rake:

-VirtualBox:~/rails_projects/blog$ rake routes Prefix Verb URI Pattern Controller#Action post_comments GET /posts/:post_id/comments(.:format) comments#index POST /posts/:post_id/comments(.:format) comments#create new_post_comment GET /posts/:post_id/comments/new(.:format) comments#new edit_post_comment GET /posts/:post_id/comments/:id/edit(.:format) comments#edit post_comment GET /posts/:post_id/comments/:id(.:format) comments#show PATCH /posts/:post_id/comments/:id(.:format) comments#update PUT /posts/:post_id/comments/:id(.:format) comments#update DELETE /posts/:post_id/comments/:id(.:format) comments#destroy posts GET /posts(.:format) posts#index POST /posts(.:format) posts#create new_post GET /posts/new(.:format) posts#new edit_post GET /posts/:id/edit(.:format) posts#edit post GET /posts/:id(.:format) posts#show PATCH /posts/:id(.:format) posts#update PUT /posts/:id(.:format) posts#update DELETE /posts/:id(.:format) posts#destroy root GET / welcome#index GET /posts/:id(.:format) posts#view DELETE /posts/:id(.:format) posts#destroy

Gracias por su ayuda e interés!


En mi caso, no estaba escribiendo esta línea debajo de la definición de la clase (maps_controller):

class MapsController < ApplicationController before_action :set_map, only: [:show, :edit, :update,:destroy] ... end

El mapa es mi modelo, después de escribir esa línea, Mi vista funcionó. Tenga cuidado de no poner el código público por debajo de los métodos privados.


Has hecho tus métodos privados. Recuerda donde pones palabra clave privada. Todos los métodos a continuación que se convertirán en privados, definirán sus métodos de esta manera. Métodos privados en extremo del controlador:

class PostsController < ApplicationController def new @post = Post.new end def index @posts = Post.all end def create @post = Post.new(params[:post].permit(:title, :text)) if @post.save redirect_to @post else render ''new'' end end def show @post = Post.find(params[:id]) end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) if @post.update(params[:post].permit(:title, :text)) redirect_to @post else render ''edit'' end end def destroy @post = Post.find(params[:id]) @post.destroy redirect_to posts_path end private def post_params params.require(:post).permit(:title, :text) end end

Espero que ayude. Gracias


Me encontré con el mismo problema que tú al seguir el tutorial. Y revisé mis códigos otra vez y luego encontré la razón. En el archivo posts_controller.rb , no puede poner el método privado en medio de los códigos, lo que significa que todos los métodos a continuación (como mostrar, editar) serán privados. En su lugar, ponga el método privado en la parte inferior de esta manera:

class PostsController < ApplicationController def new end def index @posts = Post.all end def create @post = Post.new(post_params) @post.save redirect_to @post end def show @post = Post.find(params[:id]) end private def post_params params.require(:post).permit(:title, :text) end end

Espero resolver tu problema.


Me he encontrado con este problema para. He comprobado todo el proceso y el código, todo es igual que el tutorial. Al final, en la terminal corro:

rake db:drop, rake db:create, rake db:migrate

luego reinicie el servidor, vuelva a abrir el localhost: 3000

Resuelto este problema.


Para mí, el problema solo se resolvió volviendo a ejecutar las rutas bin / rake después de crear show.html.erb. Las instrucciones llamaron para hacer esto antes, pero volver a hacerlo resolvió inmediatamente el problema sin cambiar nada más (ya que mi privacidad era lo último en mi archivo y aún recibía este error).


Sé que esto es antiguo, pero esta fue la primera publicación que apareció al buscar en Google el problema, así que quise ayudar a otros que encontraron su camino hacia este hilo.

Encontré otra forma de solucionar el problema, cambié la palabra clave privada a pública en articles_controller.rb, la guardé y fui a http://localhost:3000/articles/new y creé un nuevo artículo.

Cuando pulsé guardar artículo, se mostró como debía, luego volví y cambié la palabra clave a private y guardé articles_controller.rb, y aún así me permití crear un nuevo artículo por segunda vez, pero esta vez el método era privado. .


También me encontré con el mismo error para el mismo tutorial, y los expertos de Rails ya han respondido la pregunta técnicamente. pero solo quería decir que primero complete un video para entender el concepto y luego intente crearlo con él por segunda vez.

Para el problema anterior, el autor da la solución en el mismo video . De hecho, nos muestra este error en el video con explicación y solución (como es posible que ya lo sepa, pero estoy respondiendo por alguien como yo que visitará esta pregunta por primera vez ). . Está bien entrar en pánico en esta etapa, ya que todos somos nuevos, pero primero entendamos los conceptos en un video y luego hacemos las manos.