gpt4 book ai didi

ruby-on-rails - Rails 有许多动态条件子句

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:47 26 4
gpt4 key购买 nike

我正在尝试创建一个在 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 create:

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 子句的 block 而不是添加到现有子句?

谢谢

最佳答案

不要使用.has_many,而是定义一个简单的方法:

class User < ActiveRecord::Base
def all_cars
Car.where("cars.owner1_id = ? OR cars.owner2_id = ?", id, id)
end
end

关于ruby-on-rails - Rails 有许多动态条件子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29624279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com