我有這些模型:Rails - 如何通過has_many關聯獲取所有(唯一)數據?
汽車:
class Car < ActiveRecord::Base
has_many :car_services, dependent: :destroy
has_many :services, through: :car_services
end
汽車:
class CarService < ActiveRecord::Base
belongs_to :car
belongs_to :service
end
服務
class Service < ActiveRecord::Base
has_many :car_services
has_many :cars, through: :car_services
end
我有一個變量保存所匹配的標準,像所有的汽車:
@cars = Car.where('shipped_at = ?', params[:shipped])
現在是在@cars
保存幾輛車和每節車廂都有服務的列表。我正試圖獲得這些車輛的所有服務的唯一列表,格式爲Service A, Service O, Service P
。
如何做到這一點?有一種方法可遍歷所有@cars
,然後將每個服務保存到陣列中,然後將該陣列上的電話.uniq_by {|x| x["service_id"]}
打印出來,然後將其打印出來。
有沒有更有效的方法來做到這一點?我覺得在這個工作流程中是太多的步驟。
預先感謝您。
我相信這應該在rails 3.2中工作,甚至可能是3,但我似乎還記得在3.2中引入了pluck ... – user3334690 2014-12-05 18:26:22
其實我推薦@JiříPospíšil對這個問題的回答,因爲他的結果是在單個SQL查詢中。 – Matt 2014-12-05 18:30:33
@ user984621我認爲馬特是正確的。 JiříPospíšil的版本是一個包含子查詢的單個查詢,但仍然意味着它會以較少的時間擊中數據庫。 (編輯:對不起,打錯了人) – 2014-12-05 18:39:20