【问题标题】:Sorting query results using a model method使用模型方法对查询结果进行排序
【发布时间】:2011-07-27 17:07:29
【问题描述】:

我有以下映射(@location_matches 代表标准 SQL 查询`:

 @matches = @location_matches.map { |listing|

    }.compact

当我进入我的视图时,我可以访问@matches.username 等等等等。

但是,当我添加此模型方法时,我无法访问任何信息!

 @matches = @location_matches.map { |listing|
           listing.compute_score(current_user)

    }.compact

任何想法为什么?有一个更好的方法吗?谢谢你

【问题讨论】:

  • map 返回应用块的结果数组,因此您得到的只是计算分数的数组。你最初追求的是什么?
  • 我臭这个!我正在尝试根据查询返回的内容计算分数,然后我想按计算的分数对结果进行排序。我正在尝试各种方式(和错误的方式)。有任何想法吗?非常感谢您的帮助。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

这是按计算分数排序的:

@matches = @location_matches.sort_by{|location| location.compute_score(current_user)}

http://www.ruby-doc.org/core/classes/Enumerable.html#M001481

如果您希望它反向排序,请将 .reverse 放在末尾。

【讨论】:

  • 太棒了,谢谢! l1 和 l2 代表什么?我确定这行得通,只是想知道您是否可以帮助我理解。再次感谢!
  • 哈哈你比我自信,你先试试吧。 sort 进行比较排序,因此 l1l2 表示正在比较的每一对值......在这种情况下,每个匹配的对象。
  • 哈哈谢谢-我试一试,当您的意思是要比较的一对值时,您指的是什么?你的意思是这就像一步一步的比较?喜欢它将第一个与下一个进行比较,依此类推?
  • 这是一个涉及 Ruby 排序算法的问题:stackoverflow.com/questions/855773/…
  • 我认为sort_bysort 更适合任何昂贵的东西(比如compute_score 可能是)。
猜你喜欢
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
相关资源
最近更新 更多