Пара вещей.Делая это:
distribution_sheet = DistributionSheet.find(:all, :conditions => ["lifecycle_state = ?","open"]).last
Вы загружаете каждый объект DistributionSheet
в вашей базе данных, который соответствует этим условиям.Сейчас это может показаться быстрым, но когда у вас есть тонна записей, это займет некоторое время.Лучше сделать это вместо этого:
distribution_sheet = DistributionSheet.first(:conditions => "lifecycle_state = 'open'", :order => "id DESC")
Это достигнет той же цели, но не загрузит в первую очередь всю ассоциацию, только одну нужную вам запись.
Во-вторых, возможновместо того, чтобы проверять @result.size > 1
, вы должны вместо этого проверять его на ассоциации:
distribution_sheet.results.count > 1
Это сделает запрос SQL для подсчета числа results
для объекта distribution_sheet
.Сначала вам нужно иметь has_many :results
в модели DistributionSheet
.
Итак, еще пара вещей: я бы рекомендовал прочитать руководство Getting Started , а также ассоциацию Руководство по основам для изучения основ, необходимых для правильного решения этой проблемы.