通过连接表中的JSON属性对ActiveRecord关系进行排序

时间:2017-02-10 02:11:38

标签: ruby-on-rails activerecord

如何根据属性的值按升序对ActiveRecord关系进行排序,该属性在连接表中是否存在,并且是JSON?

首先,我查询成员并加入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个密钥{J} technicalgeneral的JSON, 即:{'technical': 'accounting', 'general': 'planning'}

我想做点什么,

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

因此,我可以根据不同情况按字母顺序排列会员。这可能吗?

如果我没有清楚解释这一点,请道歉。

1 个答案:

答案 0 :(得分:0)

纯SQL解决方案:如果您想要基于订单的结果

  

按(skills.data->'技术')订购::文本

Sort_by解决方案:

  

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