我正在开发一个简单的博客应用,但在显示与评论相关联的用户名时遇到问题。
评论belongs_to:posts和:users。帖子belongs_to:user和has_many:comments。用户has_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
我已尝试重置此处提到的数据库:Show username when posting comments in Rails
我还尝试解决此处提到的proxy_id:Returning issue in Comment::ActiveRecord_Associations_Collection
我不确定还有什么可以尝试的。此外,当我重置评论表以便其中没有数据时,应用程序仍会显示:
User:
Comment:
即使其中没有数据也会循环播放。我认为它与id混淆的动态查找器有关,但我尝试将它全部移动到控制器,如此处所提到的retrieving username with find_by_id(comment.user_id).name not working,我仍然得到未定义的方法错误。有任何想法吗?欣赏洞察力。我没有使用评论宝石,正在使用cloud9开发,并且正在使用PostgreSQL。
答案 0 :(得分:0)
我在这篇文章中发现了这个问题:Using <%= render comments %> always outputs an empty partial, even if there is nothing in the database
“问题是该表单位于&lt;%= render @ post.comments%&gt;之上,因此当您到达所有注释的部分时会有空注释,即使数据库中没有注释,也请&lt;%= render“下面的注释/表单”%&gt;来解决此问题。“