我有这两个模型:
车
class Car < ActiveRecord::Base
has_many :colors
end
颜色
class Color < ActiveRecord::Base
belongs_to :car
end
每辆车都有很多颜色。 我想做的是 - 取出所有没有黑色的汽车。
使用ActiveRecord在一个查询中有没有办法做到这一点?我可以这样做:
@cars = Car.where('brand = ?', params[:car])
@cars.each do |car|
car.colors.each do |color|
...test that the color is not black...
end
end
但是这个方法有点慢......用一个查询做一个更快的方法吗?
谢谢
答案 0 :(得分:0)
我们不知道您的Color
型号的属性,但是您正在寻找的是这样的:
@cars = Car.where('brand = ?', params[:car])
@cars = @cars.joins(:colors)
.where("colors.name <> 'black'").each do |car|
或者,如果您使用的是Rails 4:
@cars = Car.where('brand = ?', params[:car])
@cars = @cars.joins(:colors)
.where.not(colors: { name: :black }).each do |car|
答案 1 :(得分:0)
试试这个
Car.joins(:colors).where("colors.name <> 'black'").group('cars.id')
更新:
您可以在两个查询中执行此操作
black_car_ids = Color.where(:name => 'black').pluck('DISTINCT car_id')
@cars = Car.where("id not in (?)", black_car_ids).where('brand = ?', params[:car])