gpt4 book ai didi

MySQL/Rails - 根据每条记录的属性动态查询表字段

转载 作者:行者123 更新时间:2023-11-29 18:18:18 24 4
gpt4 key购买 nike

我有一个用例,需要根据 created_atstart_on 值查询 Appointment 记录。有两种类型的约会:“估计”“GLA(查看)”,由值为 0 和 0 的 type 字段表示1.

如果约会是“估计”类型,则查询需要使用 start_on 字段 - 如果约会是 GLA,则查询需要使用 created_at 字段,因为 GLA 未计划且没有 start_on 值。

现在,我正在使用 Rails 范围查询数据,以筛选在特定日期进行最后一次预约的属性,如下所示(以下显示“从”):

scope :last_appointment_from, ->(date, type) {
query = joins(:appointments)
query = query.where('appointments.start_on = (
SELECT MAX(appointments.start_on)
FROM appointments
WHERE appointments.property_id = properties.id)')
query = query.where('appointments.start_on >= ?', date)
query
}

但这仅查询 start_on 值。

我尝试过执行 GREATEST(MAX(start_on), MAX(created_at)) - 但随后我不确定如何知道在 where('events.start_on) 中使用哪个字段>= ?', date) 部分。

输入此内容后,我想到了另一种可能的解决方法 - 创建另一个数据库字段,该字段根据约会的类型使用事件记录回调上的相应日期进行更新,称为query_field 或其他东西(并运行一个脚本来为所有现有记录设置该值) - 这样我就可以只查询该一个字段?

非常感谢任何想法/帮助!

最佳答案

由于您已经有一个类型字段,因此它可能是 STI 的一个用例,即模型的 SQL 模式相同,但 ruby​​ 端的行为不同。

请注意,“类型”字段可能已经导致了您可能没有考虑到的 Rails 问题,因为该字段通常是专门为 Single Table Inheritance STI 保留的。在 rails 中。

如果您使用 STI,您只需编写一个访问器,从数据库中提取正确的字段并为每个模型呈现它。

关于MySQL/Rails - 根据每条记录的属性动态查询表字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46814692/

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