【问题标题】:How can I make the order of Find results match the order of Array input如何使查找结果的顺序与数组输入的顺序相匹配
【发布时间】:2013-01-19 21:07:40
【问题描述】:

我正在对 Person 模型执行查找。我使用一组 id 作为我的 Find 方法的输入。数组代表特定人的祖先,数组的顺序很重要。

我希望查找结果(关系)与输入祖先数组的顺序相同。不幸的是,返回的结果是按 id 的顺序(升序)排序的。有没有办法防止这种行为,并按照 ancestry_array 的顺序返回结果。

模型中没有反映祖先顺序的属性,所以我看不到使用 order 方法的直接方法。如果可能的话,我希望用 ruby​​ on rails 来实现这一点。

ancestry_array = Array.new

ancestry_array = [23,45,89,12,90,5]

Person.find(23,45,89,12,90,5)

returned order of relation: 5,12,23,45,89,90

desired order of returned relation: 23,45,89,12,90,5

【问题讨论】:

  • 我真的不知道您是否可以使用 SQL 执行此操作...但这对您的情况有效吗? ancestry_array = [23,45,89,12,90,5] r = Person.find(ancestry_array) results = ancestry_array.map{|id| r.detect{|p| p.id == id}}

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


【解决方案1】:

我会将上述评论转换为答案。

我不知道你是否可以在 SQL 中做你想做的事,但如果这在你的情况下是有效的,你可以使用:

ancestry_array = [23,45,89,12,90,5] 
r = Person.find(ancestry_array) 
results = ancestry_array.map{|id| r.detect{|p| p.id == id}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2020-01-03
    相关资源
    最近更新 更多