【发布时间】:2015-06-19 21:10:31
【问题描述】:
我正在尝试在 2 个模型之间创建一个多关联,为此我需要一个动态条件:
class User
has_many :all_cars, ->(user) {where("cars.owner1_id=? OR cars.owner2_id=?", user.id, user.id)}, class_name: "Car"
end
我希望 has_many 关联生成类似:
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_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)
但我需要使用OR 而不是AND
在使用动态条件时,如何使用覆盖WHERE 子句的块而不是添加到现有的块?
谢谢
【问题讨论】:
-
试试这个
has_many :all_cars, ->(user) {where('cars.owner1_id = :q OR cars.owner2_id = :q, q: user.id) }, class_name: "Car" -
它给出了同样的错误,你需要传递对象来访问 lambda 中的 id
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rails-activerecord