2015-10-04 70 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