【发布时间】:2020-08-18 00:09:01
【问题描述】:
我希望能够对我的帖子进行排序
- created_at asc(包括距离)
- vote_count desc(包括距离)
- 距离上升
到目前为止,我已经能够按距离排序,但我无法弄清楚如何构建我的地图,并且仍然能够让数组中的用户看到distance(即使他们选择了例如,按vote_count 排序)
用户从视图中调用 update_order
def update_order
@order = params[:order]
@posts = Post.all
get_distance_posts
end
确定距离的方法:
def get_distance_posts
posts = {}
@posts.map{ |post| posts[post.id] = (check_coordinates_present?(post, current_user) ? get_users_distance(post,current_user) : 0 ) }
@sorted_posts = Hash[*posts.sort_by {|_key, value| value}.flatten]
end
我的 view.html.erb
<% @sorted_posts.map do |u_id, dist| %>
<% post = @posts.find(u_id) %>
<p> <%= post.created_at %> </p>
<p> <%= post.vote_count %> </p>
<p><%= dist %></p>
<% end%>
任何帮助将不胜感激!
【问题讨论】:
-
我不明白这个问题。每个帖子都是哈希吗?它是如何失去领域的?
-
“丢失字段”是什么意思?我在帮助程序中计算帖子和 current_user 之间的实时距离,然后通过将帖子转换为哈希将帖子和用户之间的距离映射到帖子对象。澄清一下:我已经弄清楚如何按距离对哈希进行排序——但是我如何按其他方式对@sorted_posts 进行排序,并且仍然包括距离编号而不按距离排序?
-
我怀疑你想要像
obj.sort_by { |e| [e.created_at, -e.vote_count, e.distance] }这样的东西。数组与方法Array#<=> 进行比较。尤其参见文档的第三段。 -
只是指出,在标准时间戳实现中,
created_at是一个日期时间对象,它存储对象的创建时间直到秒。按created_at排序,然后按任何其他字段排序与仅按created_at排序相同,因为您不太可能有两条具有相同created_at值的记录。
标签: ruby-on-rails ruby ruby-on-rails-6 geocoder