【问题标题】:undefined method `comments' for nil:NilClass - listing for a specific usernil:NilClass 的未定义方法 `comments' - 列出特定用户
【发布时间】:2014-02-24 21:39:49
【问题描述】:

有帖子、cmets 和用户。我想在发布显示页面的 cmets 列表中发布特定用户的 cmets 数量。我知道我需要定义@user,但我不知道如何定义它,以便它为每个用户显示特定的数字。用户是评论的作者。

后控制器

def show
  @post = Post.find(params[:id])
  @comment = Comment.new
  @comments = Post.find(params[:id]).comments.order(created_at: :desc)
  @user = ???
end

发布/显示操作 - 错误是针对 - @user.cmets.count

<div class="row">
<% @comments.each do |comment| %><br>

<div class="col-sm-4"> <%= link_to comment.user.name, user_path(comment.user) %> <br> 
<%= image_tag(comment.user.smallimage) %><%= @user.comments.count %>
</div>

<div class="col-sm-8"> <b><%= comment.title %>:</b>   
<div>
<% if comment.content.length > 250 %>
<%= truncate(comment.content, length: 250) %>
<%= link_to_function '...Read more', "$(this).parent().html('#{escape_javascript  comment.content}')" %>
<% else %>
<%= comment.content %>
<% end %>
</div>  
</div>
<% end %>
</div>

【问题讨论】:

  • 你试过@user= User.find(params[:id])
  • 是的,但它显示找不到 id=[id_of_post] 的用户
  • 您能否编辑问题以包含有关用户什么的信息?用户是帖子的作者吗?他们是访客吗?
  • 用户是评论的作者

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

如果您定义@user,您将只有一个或一组与您的 cmets 无关的用户。你不需要它。您可以像这样使用用户和评论之间的关系:

<%= comment.user.comments.count %>

请注意,这将为每个评论运行数据库查询以获取该用户的总评论数。出于性能原因,您可能希望为此使用counter cache。

【讨论】:

    【解决方案2】:

    如果您在帖子模型belongs_to :user 中定义了关联,那么您可能可以使用@user = @comment.user

    但是,如果是这种情况,那么您可以使用 @comment.user.name 或类似的名称从视图中调用它。

    如果您已推送到 GitHub,我想查看整个代码库。

    【讨论】:

    • 是的,所以如果您定义了关联,那么您应该可以毫无问题地从视图中调用 comment.user.name。我的朋友,Rails 很神奇。
    • 定义了 User has_many :cmets, Comment belongs_to :user。错误是:@user.cmets.count
    • 你能发布 GitHub 代码库吗?如果您定义了 has_many 关系,那么 @user.cmets.count 应该可以正常工作。您是否尝试过我提到的第一个(有点骇人听闻的)解决方案?
    • 其实试试@comment.user.cmets.count
    • 既然他在做@comments.each do |comment|,那应该是comment.user.comments.count,而不是@comment.user.comments.count。他是
    猜你喜欢
    • 1970-01-01
    • 2016-12-17
    • 2011-07-27
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多