Ruby on rails Rails模型范围,从3.2.12更新到4.2.11-范围主体需要可调用

Ruby on rails Rails模型范围,从3.2.12更新到4.2.11-范围主体需要可调用,ruby-on-rails,Ruby On Rails,我正在将一个应用程序从ruby~3更新为ruby~4(说来话长,但它需要更新,而且由于它是来自地狱的遗留应用程序,因此无法超越这一点)。开发人员早就开始涉足绿色牧场,并不是什么大评论 该范围包括对另一个模型、记录的引用,该记录的范围是task。抛出范围主体需要可调用的错误 原始: scope :prod_review, includes(:records=>:task).active.where( Task.table_name + '.training_area_id = ? AND

我正在将一个应用程序从ruby~3更新为ruby~4(说来话长,但它需要更新,而且由于它是来自地狱的遗留应用程序,因此无法超越这一点)。开发人员早就开始涉足绿色牧场,并不是什么大评论

该范围包括对另一个模型、记录的引用,该记录的范围是task。抛出范围主体需要可调用的错误

原始:

scope :prod_review, includes(:records=>:task).active.where(
  Task.table_name + '.training_area_id = ? AND ' + Record.table_name + '.final_date is not null ',
  'msvs 003'
)
这会在includes上抛出一个错误

scope :prod_review, -> { includes(:records=>:task).active.where(
  Task.table_name + '.training_area_id = ? AND ' + Record.table_name + '.final_date is not null ',
  'msvs 003'
) }
抛出指向->

 scope :production_review, includes(:records=>:task).active -> { where(
  Task.table_name + '.training_area_id = ? AND ' + QualificationRecord.table_name + '.final_date is not null ',
  'msvs 003'
 ) }
我知道我需要将其更新为lambda,但无法使其正常工作

作为def重新制作:

我得到了一个无效的SQL语法。鲁比说:

def self.production_review, includes(:qualification_records=>:task).active.where(
  Task.table_name + '.training_area_id = ?,
  'msvs 003'
)

Generates this SQL:
# scope :ecr_production_review, includes(:qualification_records=>:task).active.where(
#  Task.table_name + '.training_area_id = ? AND ' + QualificationRecord.table_name + '. is not null ',
#  'msvs 003'
# )
SELECT [QualityDC].[dbmaster].[employees].* FROM [QualityDC].[dbmaster].[employees] WHERE (NOT status = 4 AND NOT status = 5) AND (QualityDC.dbmaster.Tasks.training_area_id = 'msvs 003') ORDER BY last_name, first_name

QualityDC.dbmaster.Tasks.training_area_id应该是一个联接,并查找一个值为“msvs 003”的列

更新为使用方法调用返回联接结果的相应模型

更新为使用方法调用返回用edityeah逗号打断了该特定部分,在一个模型中,我如何使用where子句查询附加到另一个模型的表?使用edityeah更新逗号打断了该特定部分,在一个模型中,我如何使用where子句查询附加到另一个模型的表?