Ruby on rails Rails有许多动态条件

Ruby on rails Rails有许多动态条件,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,rails-activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Rails Activerecord,我正在尝试创建一个在两个模型之间有很多关联的模型,为此我需要一个动态条件: class User has_many :all_cars, ->(user) {where("cars.owner1_id=? OR cars.owner2_id=?", user.id, user.id)}, class_name: "Car" end 我预计许多关联会产生如下结果: SELECT "cars".* FROM "cars" WHERE (cars.owner1_id=1 OR c.ow

我正在尝试创建一个在两个模型之间有很多关联的模型,为此我需要一个动态条件:

class User
    has_many :all_cars, ->(user) {where("cars.owner1_id=? OR cars.owner2_id=?", user.id, user.id)}, class_name: "Car"
end
我预计许多关联会产生如下结果:

SELECT "cars".* FROM "cars" WHERE (cars.owner1_id=1 OR c.owner2_id=1)
但是rails创建了:

SELECT "cars".* FROM "cars" WHERE "cars"."owner_id" = ? AND (cars.owner1_id=1 OR cars.owner2_id=1)
由于字段
owner\u id
不存在,它显然会引发错误

我也试过了

class User
    has_many :all_cars, ->(user) {where("cars.owner2_id=?", user.id, user.id)}, class_name: "Car", foreign_key: "owner1_id"
end
产生

SELECT "cars".* FROM "cars" WHERE "cars"."owner1_id" = 1 AND (cars.owner2_id=1)
但是我需要使用
而不是

在使用动态条件时,如何使用覆盖
WHERE
子句的块,而不是添加到现有块


谢谢

不要使用
。有许多
,请定义一个简单的方法:

class User < ActiveRecord::Base
  def all_cars
    Car.where("cars.owner1_id = ? OR cars.owner2_id = ?", id, id)
  end
end
class用户
试试这个
有很多:所有车,->(用户){where('cars.owner1\u id=:q或cars.owner2\u id=:q,q:user.id)},类名称:“Car”
它给出了同样的错误,您需要传递对象来访问lambda中的id