Rails App - Object_ID返回用户名

时间:2015-05-14 20:31:29

标签: ruby-on-rails ruby postgresql comments objectid

我正在开发一个简单的博客应用,但在显示与评论​​相关联的用户名时遇到问题。

评论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。

1 个答案:

答案 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;来解决此问题。“