пользователи вводят результаты только один раз - PullRequest
1 голос
/ 06 апреля 2011

У меня есть этот скрипт в контроллере результатов:

 distribution_sheet = DistributionSheet.find(:all, :conditions => ["lifecycle_state = ?","open"]).last


   if distribution_sheet.nil?
     redirect_to root_path  #you could redirect somewhere else if you want
      flash[:notice] = "There are currently no active EQAs"
  # elsif (@result.size > 1)
  #   redirect_to root_path  #you could redirect somewhere else if you want
   #   flash[:notice] = "You have already entered your EQA for EQA number #{distribution_sheet.id}"
    else
    flash[:notice] =      "EQA number #{distribution_sheet.id} is open for submissions"
  end

результат - модель. Мне нужно, чтобы пользователи вводили новые результаты, когда DistributionSheet «открыт» ТОЛЬКО ОДИН РАЗ. Elsif выше не похоже на работу. Любой совет?

Вот где ссылка @result была указана:

    def new
   @result = Result.new
   distribution_sheet = DistributionSheet.find(:all, :conditions => ["lifecycle_state = ?","open"]).last
   @result.distribution_sheet_id = distribution_sheet.id
  10.times do
            @result.specimen_results.build

  end
  specimen_ids  = distribution_sheet.specimens.collect{|specimen| specimen.id}
  @result.specimen_results.each do |specimen_result|
        specimen_result.specimen_id = specimen_ids.shift
  end

   @result.lab_id = current_user.lab_id

  end

1 Ответ

0 голосов
/ 06 апреля 2011

Пара вещей.Делая это:

 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 , а также ассоциацию Руководство по основам для изучения основ, необходимых для правильного решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...