我想找到所有不是自动的车辆。在我的车辆模型中,我有一个 auto 方法,自动返回 true,手动返回 false。在 rails 控制台中,如何返回所有手动车辆的列表?以下不起作用:
vehicles = Vehicle.find(:all);
manual_vehicles = vehicles.Where(auto.present? != true);
模型/车辆.rb
def auto
Auto.where(:vehicle_id=>self.id)
end
我想找到所有不是自动的车辆。在我的车辆模型中,我有一个 auto 方法,自动返回 true,手动返回 false。在 rails 控制台中,如何返回所有手动车辆的列表?以下不起作用:
vehicles = Vehicle.find(:all);
manual_vehicles = vehicles.Where(auto.present? != true);
模型/车辆.rb
def auto
Auto.where(:vehicle_id=>self.id)
end
Vehicle.all.select(&:auto?)
请注意,如果有大量车辆,这会很慢,因为它们都会被加载到 ruby 中。因此在 SQL 中进行测试效率更高。例如,如果您的#auto?
方法仅查看auto
布尔字段,您可以这样做:
Vehicle.where(auto: true)
这还具有将结果作为 aRelation
而不是a 的优点Array
,这允许您在调用数据库之前进一步细化下游的语句。
在我的车辆模型中,我有一个 auto 方法,自动返回 true,手动返回 false。
这是错误的,您的以下方法返回一个 ActiveRecord::Relation 包含属性vehicle_id
等于 Vehicle的所有 Auto id
:
def auto
Auto.where(:vehicle_id=>self.id)
end
如果您想要一段代码来测试 Vehicle 是否有与之关联的 Auto,请使用以下代码:
def auto?
Auto.where(vehicle_id: self.id).present? # returns TRUE or FALSE
end
然后,如果您想获得所有手动车辆:
Vehicle.all.select{|vehicle| vehicle.auto? != true }
或者在 DB 级别(更快、更好、更强!):
Vehicle.where('id NOT IN (?)', Auto.pluck(:vehicle_id).uniq.compact)
# This will get all vehicles where there id is not contained in the Auto table