是否可以像这样进行查询? (伪码)
u=User.includes(all_delegated_attributes_from_relationships).all
如何?
进一步解释:
class User<ActiveRecord::Base
has_one :car
delegate :wheel, :brake, :motor, to: :car, prefix: true
end
然后:
u=User.includes(delegated_car_parts).all
#<user id: 1, car_id: 1, name: "John", car_wheel: "foo", car_motor: "bar", car_brake: false>
我知道这听起来有些奇怪,但我必须在旧应用程序中添加一个功能,将所有委托属性从模型导出到CSV,这个模型有14个关系和300个代表...我刚刚学习了得墨忒耳定律当我制作这个应用程序时...
答案 0 :(得分:3)
假设车轮,休息和马达是汽车的关系,你可以这样做:
User.includes(:car => [:wheel, :brake, :motor]).all
答案 1 :(得分:2)
没有内置方法可以做到这一点。你可以尝试像:
class User < ActiveRecord::Base
has_one :car
DelegatedCarMethods = [:wheel, :brake, :motor]
delegate *DelegatedCarMethods, to: :car, prefix: true
scope :with_car_delagations, lambda do
select_array = ["#{table_name}.*"]
select_array += DelegateCarMethods.map {|method| "#{Car.table_name}.#{method} AS car_#{method}"}
select(select_array.join(', ')).joins(:car)
end
end
但它并不是非常漂亮。你为什么需要这个?致电user.wheel
或user.motor
感觉不对。