Tag: 排序

按共同关联数排序(Rails)

背景:我有post和用户,都有很多社区。 目标:对于任何给定的用户,我想返回一组post,按照post与用户共有的社区数量排序(更多社区的post更高) 我当前的尝试(使用排序方法)有效: Post.includes(:community_posts).where(community_posts: { community_id: current_user.community_ids }).sort{ |x,y| (y.community_ids & current_user.community_ids).length (x.community_ids & current_user.community_ids).length } 但有没有更好/更有效的方法来做到这一点?

如何按平均评分对记录进行排序?

我有一个场地表,我在场地索引页面上显示为局部。 我还有一个评论表,其中一个场所可以有很多评论,每个评论的评分为1-5。 我正试图让索引页面上的场地显示平均评分最高且下降的场所。 控制器代码如下所示: 场地控制器 def index if @venues = Venue.with_type(params[:venuetypes]).with_area(params[:areas]).joins(:reviews).order(“reviews.rating DESC”) else @venues = Venue.all end end 这给出了这样的结果: 如果场地1有5星评价,它会显示位于列表顶部的场地。 如果场地2有5星评论和1星评论它显示两个部分,一个在顶部和一个 在列表的底部。 如果场地3有5星评论,3星评论和1星评论它显示三个部分,一个在顶部,一个在中间,一个在列表的底部。 我只是希望每个场地有一个局部展示,但是按照平均评分排在列表中,我觉得这里有一个.average或某些遗漏的东西我怎么能实现这个目的? 感谢任何帮助,非常感谢! 编辑 场地模型 class Venue true scope :with_type, lambda { |types| types.present? ? where(:venuetype_id => types) : scoped } scope :with_area, lambda { |areas| areas.present? ? where(:area_id => areas) : scoped […]

按Rails 3中的虚拟属性排序

背景:我有一组可以投票的post。 我想根据他们的“投票得分”对post进行排序,这可以通过以下公式确定: ((@ post.votes.count)/((Time.now – @ post.created_at)** 1)) 我目前正在定义投票得分: def vote_score(x) ( (x.votes.count) / ( (Time.now – x.created_at) ** 1 ) ) end 并将它们排序为: @posts = @posts.sort! { |a,b| vote_score((b) vote_score((a) } 目标:此方法对我的应用程序加载时间造成巨大损失。 有没有更好,更有效的方法来完成这种排序?

按升序订单导轨排序

嗨,我有这个模型 型号项目 class Inventory::Item “ItemType” attr_accessible :name end 模型item_type class Inventory::ItemType < ActiveRecord::Base belongs_to :item attr_accessible :number end 然后在控制器中说,我想根据项目名称按升序对类型(具有类ItemType)进行排序。 我怎么做? 例如, ItemType number = 1具有Item name = Table ItemType number = 2具有Item name = Chair ItemType number = 3具有Item name = Window ItemType number = 4具有Item name = Computer 所以不是从数字中对它进行排序,而是希望它基于item.name(ASC)进行排序,如下所示: ItemType number = 2具有Item name […]

Rails:如何对多对多关系进行排序

我在模型User和Picture之间有多对多的关系。 它们通过名为Picturization的连接表链接。 如果我获得单个图片的用户列表,即picture.users – >如何确保获得的结果通过创建Picturization行(即图片与用户关联的顺序)进行排序。 如果我想按修改顺序获得这个,这将如何改变? 谢谢! 编辑也许像 picture.users.where(:order => “created_at”) 但是这个created_at引用了picturization中的created_at

Rails RESTful应用程序中的分页和排序

有关如何在Rails应用程序中的资源上实现排序和分页并仍保持RESTful的任何提示? 如何以干净的方式映射页码和排序字段的参数? (我目前正在为我的应用中的每个资源使用map.resources:x ) 我应该知道的任何其他性能问题? (例如缓存) 提前致谢。 编辑我将问题重新制定为更通用的问题,希望我能得到更多答案。 我打算投票关闭这个,因为它不再相关。 感谢insane-dreamer和vrish88的答案。

Postgres排序问题

我想通过评级DESC来排序。 它适用于MySQL,但适用于PostgreSQL。 我得到了不同的结果。 你可以在这里看到问题: http : //www.vinderhimlen.dk/konkurrencer 我的控制器: def sort_column Konkurrancer.column_names.include?(params[:sort]) ? params[:sort] : “rating” end def sort_direction %w[desc asc].include?(params[:direction]) ? params[:direction] : “desc” end

Ruby sort_by用于MySQL返回的数组,日期格式为字符串

我有一个有task表的数据库。 在该表中,有一个date列。 这些日期格式化为字符串,它们不是Date 。 我正试图按日期对这些任务进行排序。 我已经有一系列名为tasks 。 我正在尝试使用以下代码将其替换为名为tasksByDate的已排序数组。 tasksByDate = tasks.sort_by do |task| task[:date].to_date end 我得到的错误是: TypeError: no implicit conversion of Symbol into Integer 我也试过没有to_date只是为了看看它是否会在没有日期的情况下对其进行排序,而只是一个字符串。 date字段的格式为字符串,如2016-08-29 。 我在代码中的其他地方使用了to_date方法,它工作得很好,所以我并不认为这是问题所在。 编辑1 我已经检查过任务实际上包含一个日期,并且它的格式与解释相同。 p task.class的输出是Array 编辑2 p task的输出是 [#]

Ruby Regex捕获字符串中的任何数字字符

所以,我已经做了很多研究,并查看了大量的正则表达式文档,指南和正则表达式生成器,但我发现的任何内容都无法告诉我如何执行此操作(甚至不是在StackOverflow弹出框中出现的链接我在这个问题的“标题”字段中键入了“正则表达式”。 基本上,我正在编写一个数学程序(在Ruby中)来解决一种非常特殊的数学问题。 将有两个输入采用字符串(通过gets.chomp),一个字符串将采取的forms 2x^3+4x^2+5x-42 现在,指数(^ 3和^ 2)将保持不变,正则表达式可以忽略这些指数,任何加法和减法符号以及任何“x”字符都可以忽略。 所以从本质上讲,我需要弄清楚如何编写一个可以对字符串中的任何数字字符进行排序的正则表达式,除非它们前面有一个“^”(表示一个指数),并将它们推出到一个数组中。 (数组中的数字串将在以后解析为数值) 因此,例如,理想的正则表达式会采取类似的方式 8x^3-4x^2+3x-17 并返回一个包含等式中系数的数组 [“8”, “-4”, “3”, “-17”] 保留它们存在的负/减符号很重要。 另一个例子: 这需要 -6x^3+7x^2-5x+9 并返回 [“-6”, “7”, “-5”, “9”] 我有什么想法可以这样做吗? 应用两个单独的正则表达可能更容易吗? Ruby请回答。

Rails 3 – 如何通过对属性进行数学运算来对AR查询结果进行排序?

我正在构建一个控制器/视图,提供广泛的玩家排名选择(例如“十大领导者委员会”。)使用此模型: class Player < ActiveRecord::Base attr_accessible :name, :games_played, :games_lost, :games_won, games_exited, :total_kills, :total_deaths, :total_points, :total_coins end 在我的控制器中,我有一些明显的查询结果传递给我的视图来填充玩家排名列表: @top_winners = Player.order(“games_won DESC”).limit(10) @top_assassins = Player.order(“total_kills DESC”).limit(10) 我现在需要添加一些计算排序的排序。 例子: @most_greedy would be sorted on: :total_coins / :games_played @most_lethal would be sorted on: :total_kills / :games_played @most_vanquished would be sorted on: :total_deaths / (:games_lost + :games_exited) 我的方法是让所有玩家都在一个数组中,然后使用Ruby的array.sort {| […]