Мне нужно иметь возможность отображать электронную почту пользователя, который прокомментировал сообщение в моем приложении rails.
Я уже убедился, что все мои ассоциации верны, и внутри метода create я зарегистрировал current_user.email
и @comment.user.email
, которые оба возвращают правильные значения.Тем не менее, в частичном _comment
я получаю сообщение об ошибке: nil.
Модели:
class Comment < ApplicationRecord
belongs_to :post
belongs_to :user
validates :comment_text, presence: true
end
class Post < ApplicationRecord
belongs_to :user
has_many :comments, dependent: :destroy
validates :title, presence: true
validates :content, presence: true
end
class User < ApplicationRecord
has_secure_password
has_many :posts, dependent: :destroy
has_many :comments, dependent: :destroy
validates :email, presence: true, uniqueness: true
end
Контроллер:
class CommentsController < ApplicationController
before_action :find_post, only: [:show, :create, :edit, :update, :destroy]
def index
@comments = Comment.all.order('created_at ASC')
end
def show
end
def new
@comment = Comment.new
end
def create
@comment = @post.comments.create(comment_params)
@comment.user_id = current_user.id
@comment.user.email = current_user.email
puts current_user.email
puts @comment.user.email
if @comment.save
flash[:success] = 'Your comment has been added to the post'
redirect_to post_path(@post)
else
flash.now[:error] = 'Something went wrong. Your comment was not added to the post'
render 'new'
end
end
def update
end
def edit
end
def destroy
end
private
def comment_params
params.require(:comment).permit(:comment_text, :post)
end
def find_post
@post = Post.find(params[:post_id])
end
end
Частичное представление:
<p><%= comment.comment_text %></p>
<p><%= comment.user %></p>
<p><%= comment.user_id %></p>
<p><%= comment.user.email %>
Представление пост-шоу:
<div class="comment-div">
<%= render @post.comments %>
</div>
Я ожидаю увидеть электронную почту комментатора, но вместо этого я получаю эту ошибку:
undefined method `email' for nil:NilClass
Extracted source (around line #4):
2
3
4
<p><%= comment.user %></p>
<p><%= comment.user_id %></p>
<p><%= comment.user.email %>