【问题标题】:Sort ActiveRecord relation by JSON attribute from joined table通过连接表中的 JSON 属性对 ActiveRecord 关系进行排序
【发布时间】:2017-02-10 02:11:37
【问题描述】:

如何根据属性值、该属性存在于连接表中的位置以及 JSON 格式对 ActiveRecord 关系进行升序排序?

首先,我正在查询成员并加入skills 表。

members = Member
.select('
  member.id,
  member.skills_id,
  member.name,
  member.position,
  skills.data as data')
.join('left join skills on skills.id = member.skills_id')  

在每个成员记录中,skills.data 是一个带有 2 个键的 JSON,technicalgeneral, 即:{'technical': 'accounting', 'general': 'planning'}

我想做类似的事情,

if project.status == 'complex'
  members.sort_by {|x| x['data']['technical']}
else
  members.sort_by {|x| x['data']['general']}
end

所以我可以根据成员的技能按字母顺序,根据不同的情况对成员进行排序。这可能吗?

抱歉,如果我没有清楚地解释这一点。

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    纯 SQL 解决方案:如果你想要 n 个基于顺序的结果

    按 (skills.data->'technical')::text 排序

    Sort_by 解决方案:

    members.sort_by! { |会员| member.data['technical'].to_s }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      相关资源
      最近更新 更多