2015-10-04 69 views
0

我想通過一個連接得到一個簡單的哈希結果。我得到了正確的輸出,但我討厭我的實現。優雅:如何更好地扁平積極的記錄查詢

這是我當前的嘗試:

class Position < ActiveRecord::Base 
    has_many :position_synonyms 
end 

class PositionSynonym < ActiveRecord::Base 
    belongs_to :position 
end 

這是我當前的嘗試。我敢肯定有一個更優雅的方式來做到這一點:我想你可以嘗試

def flat 
result = [] 
Position.all.includes(:position_synonyms).each do |p| 
    result.push({id:p.id, name: p.name}) 
    if p.position_synonyms 
    p.position_synonyms.each do |s| 
     result.push({id:p.id, name:s.name}) 
    end 
    end 
end 
result 
end 

回答

2

def flat 
    Position.select(:id, :name).map{|p| {id: p.id, name: p.attributes}] + 
    PositionSynonyms.select(:position_id, :name).map{|s| {id: s.position_id, name: s.name}] 
end 

或可能是更好的表演:

def flat 
    Position.pluck(:id, :name).map{|p| {id: p[0], name: p[1]}] + 
    PositionSynonyms.pluck(:position_id, :name).map{|s| {id: s.[0], name: s.[1]}] 
end