Ruby on rails Rails模型范围,从3.2.12更新到4.2.11-范围主体需要可调用
我正在将一个应用程序从ruby~3更新为ruby~4(说来话长,但它需要更新,而且由于它是来自地狱的遗留应用程序,因此无法超越这一点)。开发人员早就开始涉足绿色牧场,并不是什么大评论 该范围包括对另一个模型、记录的引用,该记录的范围是task。抛出范围主体需要可调用的错误 原始: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
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子句查询附加到另一个模型的表?