lavezzi1
@lavezzi1

Как исправить ошибки при открытие поста до создания пользователя?

Всем привет. Делаю приложение по этому туториалу www.youtube.com/watch?v=70Pu_28yvdI

Застрял на моменте, когда автор создает пользователя (установив gem advise). Так вот, все сделал по видео. Работает только на новых постах, то есть когда создал уже будучи пользователем. А старые посты не открываются вообще, ошибка следующая:
NoMethodError in Posts#show
Showing /home/roman/muse/app/views/posts/show.html.haml where line #5 raised:

undefined method `name' for nil:NilClass
Extracted source (around line #5):
3
4
5
6
7
8

%p= post.link
%p= post.description
%p= post.user.name

= link_to "Edit", edit_post_path(@post)
= link_to "Delete", post_path(@post), method: :delete, data: { confirm: "Are you sure?" }

Rails.root: /home/roman/muse

Application Trace | Framework Trace | Full Trace
app/views/posts/show.html.haml:5:in `_app_views_posts_show_html_haml___2652678237944587056_70251639245740'
Request

Parameters:

{"id"=>"2"}


Вот код файла post_controller.rb
class PostsController < ApplicationController
	before_action :find_post, only: [:show, :edit, :update, :destroy]
	before_action :authenticate_user!, except: [:index, :show]

	def index
		@posts = Post.all.order("created_at DESC")
	end

	def show
	end

	def new
		@post = current_user.posts.build
	end

	def create
		@post = current_user.posts.build(post_params)

		if @post.save
			redirect_to @post
		else
			render 'new'
		end
	end

	def edit
	end

	def update
		if @post.update(post_params)
			redirect_to @post
		else
			render 'edit'
		end
	end

	def destroy
		@post.destroy
		redirect_to root_path
	end

	private

	def find_post
		@post = Post.find(params[:id])
	end

	def post_params
		params.require(:post).permit(:title, :link, :description, :image)
	end
end


Код файла show
= image_tag @post.image.url(:medium)
%h1= @post.title
%p= @post.link
%p= @post.description
%p= @post.user.name

= link_to "Edit", edit_post_path(@post)
= link_to "Delete", post_path(@post), method: :delete, data: { confirm: "Are you sure?" }


Уже все проверил 20 раз. Прошу помощи!

UPD. id разные

2.2.0 :006 > Post.first
  Post Load (1.2ms)  SELECT  "posts".* FROM "posts"  ORDER BY "posts"."id" ASC LIMIT 1
 => #<Post id: 1, title: "", link: "", description: "", created_at: "2015-02-21 17:43:16", updated_at: "2015-02-22 05:49:10", user_id: 1> 
2.2.0 :007 > Post.last
  Post Load (0.6ms)  SELECT  "posts".* FROM "posts"  ORDER BY "posts"."id" DESC LIMIT 1
 => #<Post id: 6, title: "Amazon.com Redesign", link: "#", description: "Try to retouch amazon.com homepage with material d...", created_at: "2015-02-22 06:36:12", updated_at: "2015-02-22 06:43:43", user_id: 1>
  • Вопрос задан
  • 2330 просмотров
Решения вопроса 1
@ID25
Это потому, что у старых постов нет пользователя, который их создал. Либо через консоль добавь им user.id, либо просто очисти БД от всех записей.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы