2017-02-10 11 views
0

Как я могу сортировать отношение ActiveRecord в порядке возрастания, исходя из значения атрибута, где этот атрибут существует в объединенной таблице, и является ли JSON?Сортировка отношения 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 является JSON с 2-мя ключами, technical и general, именно: {'technical': 'accounting', 'general': 'planning'}

Я хотел бы сделать что-то подобное,

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

Так что я могу на основе их навыков в алфавитном порядке, основанных на разных случаях. Это возможно?

Извините, если я не объясню это четко.

ответ

0

Pure решение SQL: если вы хотите, п результат на основании порядка

порядка по формуле (skills.data -> 'технического') :: текст

sort_by решение:

members.sort_by! {| участник | member.data ['technical']. to_s}