优雅:如何更好地展平活动记录查询

时间:2015-10-04 20:29:58

标签: ruby-on-rails ruby-on-rails-4 activerecord

我试图通过连接获得简单的结果哈希值。我得到了正确的输出,但我讨厌我的实现。

这是我目前的尝试:

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

1 个答案:

答案 0 :(得分:2)

我想你可以试试:

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

或表现可能更好:

{{1}}