Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在帖子上显示所有评论,但仅显示一次用户名_Ruby On Rails_Sqlite - Fatal编程技术网

Ruby on rails 在帖子上显示所有评论,但仅显示一次用户名

Ruby on rails 在帖子上显示所有评论,但仅显示一次用户名,ruby-on-rails,sqlite,Ruby On Rails,Sqlite,在特定的用户帖子上,我想显示所有评论,但只显示一次给定的用户名 我已经有了一个Post模型,与它的所有注释关联。注释与其用户相关联。但我不知道如何只显示一次给定用户的用户名。因此,不是: User1: "I commented First" User2: "I commented Second" User1: "I'm commenting Again!!!!" User1: "And....Again!" 我应该: User1: "I commented First" "I'm

在特定的
用户
帖子上,我想显示所有评论,但只显示一次给定的用户名

我已经有了一个
Post
模型,与它的所有
注释关联。
注释
与其
用户
相关联。但我不知道如何只显示一次给定用户的用户名。因此,不是:

User1: "I commented First"
User2: "I commented Second"
User1: "I'm commenting Again!!!!"
User1: "And....Again!"
我应该:

User1: "I commented First"
       "I'm commenting Again!!!!"
       "And....Again!"
User2: "I commented Second"
这段代码设法显示页面上的所有注释

<% @post.comments.each do |comment| %>
  <% if comment.id %>
    <%= link_to comment.user.username, comment.user %> says: <%= comment.content %><br>
  <% end %>
<% end %>
你可以用。通过指定
&:user
我们告诉
groupby
我们希望根据每个注释的
user
属性的结果进行分组,下面是一个示例:

<% @post.comments.group_by(&:user).each do |user, comments| %>
   #- user variable contains a user record 
   #- comments is an array of comments
   <%= link_to user.username, user %> <%= comments.map(&:content) %> 
<% end %>

#-用户变量包含一个用户记录
#-注释是注释的数组
这个例子只是向您展示了一种方法

实际上,这种方式将生成注释,您应该在可以使用的子查询中加载注释。通过指定
&:user
我们告诉
groupby
我们希望根据每个注释的
user
属性的结果进行分组,下面是一个示例:

<% @post.comments.group_by(&:user).each do |user, comments| %>
   #- user variable contains a user record 
   #- comments is an array of comments
   <%= link_to user.username, user %> <%= comments.map(&:content) %> 
<% end %>

#-用户变量包含一个用户记录
#-注释是注释的数组
这个例子只是向您展示了一种方法

实际上,这种方式会生成注释,您应该在子查询中加载注释

用户现在是如下所示的哈希:

{“George Brassens” => [#<Comment id:131 …>, #<Comment id:331 …>], “Billie Holiday” => [#<Comment id:111 …>, #<Comment id:911 …>] }
用户现在是如下所示的哈希:

{“George Brassens” => [#<Comment id:131 …>, #<Comment id:331 …>], “Billie Holiday” => [#<Comment id:111 …>, #<Comment id:911 …>] }

我准备了相同的,但你发布了它+1我确实先尝试了,它最终将它打印到屏幕上:用户1说:[“第一条评论”,“第二条评论”]@AustinBurke抱歉,我不明白。我尝试了你的建议,在浏览器中,它将评论显示为一个评论数组,而不是:用户1说:“第一条评论”“第二条评论”
comments
这是一个数组,你可以在上面使用
每个
&:content
它是
comments.map{x | x.content}
的快捷方式。我准备了相同的,但你发布了它+1。我确实是先尝试过的,结果它打印到了屏幕上:用户1说:[“第一条评论”,“第二条评论”]@AustinBurke抱歉,我不明白。我尝试了你的建议,在浏览器中,它将评论显示为一个评论数组,而不是:User1说:“第一个评论”“第二个评论”
评论
这里是一个数组,你可以使用
每个
内容
这是
评论.map{x | x.content}的快捷方式
。您可以尝试下面给出的答案以获得更好的解释。您真的仔细考虑过这个问题吗?如果评论是一个对话框呢?如果您按用户而不是按时间顺序对它们进行排序,则它们可能不再有意义。@max这是我试图通过的rspec测试之一。我没有写测试,你可以尝试下面给出的答案,以便更好地解释。你真的考虑过这个问题吗?如果评论是一个对话框呢?如果您按用户而不是按时间顺序对它们进行排序,则它们可能不再有意义。@max这是我试图通过的rspec测试之一。我没有写测试
<%users.each_pair do |user, comments|
  <h1><%= link_to user.username, user %> says:</h1><br>
  <%comments.each do |comment| %>
    <%=comment.body%><br />
  <%end%>
<%end%>
<%users.keys.sort.each do |author|
  <h1><%= link_to author.username, author %> says: </h1><br>
  <%users[author].each do |comment|%>
    <%=comment.body%><br />
  <%end%>
<%end%>