鉴于以下模型:
ServiceCenter
has_many :country_codes
CountryCode
belongs_to :service_center
什么是ActiveRecord查询将返回如下内容:
{
"US": ["United States"],
"PT": ["Portugal", "Spain", "Estonia"],
"FR": ["France", "Germany", "Austria"]
}
其中键是每个ServiceCenter的country
属性,值是属于它的每个CountryCode的country_name
属性?换句话说,我只想要一个CountryCodes属于每个ServiceCenter的列表,仅显示这些属性。
{ 'service_centers.country': 'country_code.country_name', 'country_code.country_name' }
我试过这个:
CountryCode
.joins(:service_center)
.select('country_codes.country_name', 'service_centers.country')
.group('service_centers.country')
但这会返回:
<ActiveRecord::Relation [
<CountryCode id: nil, country_name: "Portugal">,
<CountryCode id: nil, country_name: "United States">,
<CountryCode id: nil, country_name: "Portugal">.....]>
我也尝试了ServiceCenter.joins(:country_code)....
但是类似的结果 - 与ServiceID对象的ActiveRecord关系,其id为nil,并且给出了country
属性。
我已经查看了与此类似的答案:Get all records grouped by field from association and sorted by count in group,但我不想要计算。
我很感激任何帮助!!
答案 0 :(得分:2)
不建议您获取以下所有记录,因为它会有优化问题。但是,为了您的理解,您可以尝试:
hash = {}
ServiceCenter.all.each do |service_center|
hash[service_center.country] = service_center.country_codes.pluck(:country_name)
end
输出hash
就像是,例如:
{
"US": ["United States"],
"PT": ["Portugal", "Spain", "Estonia"],
"FR": ["France", "Germany", "Austria"]
}
注意:哈希不能像您指定的那样拥有多个值,它应该采用数组的形式。
修改强>
不完全是你想要的,但这可能会有所帮助:
ServiceCenter.joins(:country_codes).group("service_center_id").pluck("service_centers.country, GROUP_CONCAT(country_codes.country_name)")
<强>输出强>
[["US", "United States"], ["PT", "Portugal, Spain, Estonia"], ["FR", "France, Germany, Austria"]]