gpt4 book ai didi

ruby-on-rails - Rails - 使用带有自定义命名关联的连接

转载 作者:数据小太阳 更新时间:2023-10-29 07:42:21 24 4
gpt4 key购买 nike

我有以下模型

class Measurement < ApplicationRecord
belongs_to :examination, class_name: "TestStructure", foreign_key: "examination_id"

end

关联实际上是对TestStructure模型进行的,只是关联名称是examination。 没有考试台。

当我使用join 查询时出现问题。以下查询

Measurement.joins(:examination).where(examination: { year: 2016, month: 5 })

失败,出现这个错误

ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "examination"
LINE 1: ...d" = "measurements"."examination_id" WHERE "examinati...
# --- Caused by: ---
# PG::UndefinedTable:
# ERROR: missing FROM-clause entry for table "examination"
# LINE 1: ...d" = "measurements"."examination_id" WHERE "examinati...

很明显,examinations 表不存在,但我无法找到一种方法来告诉 ActiveRecord 我正在使用命名关联而不是默认关联。

有什么见解吗?

最佳答案

where 需要实际的表名,它只是将它插入到 SQL 中:

Article.where(whatever: {you: 'want'}).to_sql
=> "SELECT `articles`.* FROM `articles` WHERE `whatever`.`you` = 'want'"

所以你可以使用:

Measurement.joins(:examination).where(test_structures: { year: 2016, month: 5 })

但是不好

然后你依赖于表名,而模型应该抽象这些东西。你可以使用 merge :

Measurement.joins(:examination).merge(TestStructure.where(year: 2016, month: 5))

关于ruby-on-rails - Rails - 使用带有自定义命名关联的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45947285/

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