我在我的Job模型中有以下范围,似乎在我的语句中存在一些SQL差异问题。我们的开发数据库是mysql,显然heroku有postgres,并且由于某种原因它不断抱怨file_count。Activerecord postgres-mysql问题的解决方案
我打算只将这些范围转换为类方法,或者至少将SQL语句更改为活动记录,以便它可以独立于数据库。这是否可能,我将如何开始这一个?
我打算保持is_active,因为我很确定它的工作原理是一个简单的范围语句,但with_unclassified_files_available_count需要重构,我认为AR重构将是一个好主意(如果您认为这不是一个好主意,请告诉我的,我很开放的建议)
下面的代码:
scope :is_active, where(:active => true)
scope :with_unclassified_files_available_count, where("audio_files.category_id IS NULL")
.joins(AUDIO_FILES)
.select("jobs.*, COUNT(*) AS file_count")
.group("jobs.id")
.order("batch_identifier DESC")
scope :has_files_available, with_unclassified_files_available_count.having("count(*) > 0")
scope :available_to_work_on, is_active.has_files_available
附加信息:
工作有许多audio_files和的AudioFile属于工作。