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%>