【问题标题】:Ruby on Rails: Active-Record sort and put specific row to the topRuby on Rails:Active-Record 排序并将特定行放在顶部
【发布时间】:2018-02-12 09:39:08
【问题描述】:

我有一个活动记录 one -> many 关联,我需要 get all child rows 从特定行开始

类似

parent.children.startwith(some_child_row_id)

有单行吗?

编辑: 更清晰

假设我们有一个数组

a = ["a","b" ,"cg", "d","e"]

我希望"cg" 成为第一个元素。 我会做类似的事情

element = a.delete("cg")  // array will be ["a","b","d","e"]
a.unshift(element) // array will now become ["cg","a","b","d","e"]

看!一个元素被移动到索引 0。

在 ActiveRecord 行的情况下我想要相同的,最好是 One-liner。

【问题讨论】:

    标签: ruby ruby-on-rails-5 rails-activerecord


    【解决方案1】:

    我想条件排序可以解决问题。

    parent.children.order("CASE WHEN (id = #{some_child_row_id}) THEN 0 ELSE 1 END ASC, id")
    

    【讨论】:

    • 我想获取以特定行开头的all 子行。
    • 更具体。作为特定父项的子项的所有行?还是所有有父对象的行?
    • 作为specific 父级的子级的所有行。
    • 请查看问题。我添加了一个示例。
    • 是的,我明白你之前的意思,这就是我编辑答案的原因:)
    【解决方案2】:

    其实很简单。

    您只需将 where 子句应用于您父母的孩子。

    试试这样的。

    parent.children.where('id > ?', start_row)
    

    我相信这就是您想要的。希望这会有所帮助。

    【讨论】:

    • 实际上,我希望从特定行开始收集父级的所有子行作为回报。
    • @WaqarHassan 具体行是怎么定义的?它是基于 id 还是其他?
    • 它基于子行之一的 id。
    • parent.children.where('id > 10') 有什么问题?它将为您提供所有 id 大于 10 的 parent 的孩子。
    • 请查看问题。我已经添加了一个示例。
    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多