我正在开发一个简单的博客应用程序,我有麻烦显示与评论相关的用户名。
Comments belongs_to:posts and:users。Posts belongs_to:user和has_many:comments。用户有_many:帖子和:评论。
我的评论模型中的创建操作工作,并按照预期使用post_id和user_id存储评论:
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
@comment.user = current_user
if @comment.save
redirect_to @post
else
flash.now[:danger] = "error"
end
end
private
def comment_params
params.require(:comment).permit(:content)
end
end
我可以通过控制台访问用户名,使用Comment.first.user.name返回用户名。当尝试在视图中执行此操作时,我得到以下错误:
undefined method `name' for nil:NilClass
视图如下:
<% @post.comments.each do |comment| %>
<p>User:<%= comment.user.name %></p>
<p>Comment:<%= comment.content %></p>
<% end %>
当我在视图中从用户中删除。name时,应用程序显示看起来像是object_id的内容。
User:#<User:0x00000001f62830>
Comment:Test comment
我已经尝试重置这里提到的数据库:在Rails中发表评论时显示用户名
我也试图解决这里提到的proxy_id:在评论中返回问题::ActiveRecord_Associations_Collection
我不知道还能尝试什么。此外,当我重置评论表时,其中没有数据,应用程序仍然显示:
User:
Comment:
,即使其中没有数据,它也会循环执行。我认为这与动态查找器混淆的id,但我试图将其全部移动到控制器,这里提到的,检索用户名与find_by_id(comment.user_id).name不工作,我仍然得到未定义的方法错误。什么好主意吗?感谢你的洞察力。我没有使用评论gem,我在cloud9中开发,我使用PostgreSQL。
我在这篇文章中发现了这个问题:使用<%= render comments %>总是输出一个空的部分,即使数据库中没有
"问题是表单在<%= render @post.comments %>之上,所以当您到达所有评论的部分时,即使数据库中没有,也可以将<%= render "comments/form" %>放在下面来解决这个问题。"