我有两种模式:
class Manufacturer < ActiveRecord::Base
has_many :models
end
class Model < ActiveRecord::Base
belongs_to :manufacturer
belongs_to :model
end
我希望能够找到所有型号属于特定类别的制造商:
manufacturers = Model.find(:all, :conditions=>["vehicle_category_id = 1"], :include => :manufacturer, :group => "manufacturer_id").map {|model| model.manufacturer }
但我希望能够按制造商名称(即manufacturer.name
)订购结果你知道我怎么做吗?
更新
这对我有用,但看起来非常低效,必须是更好的方法:
manufacturers = (Model.find(:all, :conditions=>["vehicle_category_id = 1"], :include => :manufacturer, :group => "manufacturer_id").map {|model| model.manufacturer }).compact.sort{|x,y| x.name <=> y.name}
答案 0 :(得分:0)
解决方案1
Manufacturer.all(
:condition => [ "EXISTS (
SELECT a.id
FROM models a
WHERE a.manufacturer_id = manufacturers.id AND
a.vehicle_category_id = ?
)",
1
],
:order => "manufacturers.name"
)
解决方案2
Manufacturer.all(
:select => "DISTINCT manufacturers.*",
:joins => :models,
:condition => [ "models.vehicle_category_id = ?", 1],
:order => "manufacturers.name"
)
解决方案2使用rails构造。
解决方案1比解决方案2更快。