2013-03-01 2 views
0

У меня есть инструкция after_create, которая использует модель для создания вложенных атрибутов. Я фильтрую дни логических полей недели, но оператор if замораживает сервер (без ошибок).Оператор if и/или взлом сервера

Я включил соответствующий код ниже. Для claification, воскресенье через субботу являются булевыми полями в базе данных. Если я удалю все «и» предложения, которые фильтруют логические поля, форма завершается, но мне нужно отфильтровать даты, которые не выбраны в будние дни.

def new_visit 
    day = 0 
    dates = (visit_date_start .. visit_date_end).count + 1 
    while day <= dates 
    date = visit_date_start + day 
    day_of_week = date.strftime("%A").downcase 
    if (day_of_week == 'sunday' and sunday == true) or (day_of_week == 'monday' and monday == true) or (day_of_week == 'tuesday' and tuesday == true) or (day_of_week == 'wednesday' and wednesday == true) or (day_of_week == 'thursday' and thursday == true) or (day_of_week == 'friday' and friday == true) or (day_of_week == 'saturday' and saturday == true) 
     visits.create(:visit_price => visit_price, :visit_type => visit_type, :client_id => client_id, :visit_date => date) 
     day += 1 
    end 
    end 
end 

UPDATE

Я посмотрел в журналы, и один раз в то время, сервер выдает сообщение об ошибке, как показано ниже. Я верю, что это ошибка блокировки sqlite. Есть ли более глубокое понимание этого?

BusyException: cannot rollback transaction - SQL statements in progress: rollback transaction 
+0

Я думаю, что утверждение if - это красная селедка. Можете ли вы получить доступ к этим переменным за пределами этого метода, например. можете ли вы распечатать их или записать в файл журнала? –

+0

Дни недели - это логические поля в базе данных, почему они не будут доступны? Я не уверен, как печатать или записывать их в файл журнала. – Shaun

+0

Rails.logger.debug ("Суббота: # {суббота}"), например. Я понимаю, что они являются логическими в БД, я говорю, что я не думаю, что проблема «если» является проблемой, я подозреваю, что это выражение содержится в нем. Наиболее вероятными являются области базы данных. :) –

ответ

0

Решение было то, что мне нужно было добавить в предложение «else», иначе метод поймал, ожидая, что делать дальше. Результирующий метод:

def new_visit 
    day = 0 
    dates = (visit_date_start .. visit_date_end).count + 1 
    while day <= dates 
    date = visit_date_start + day 
    day_of_week = date.strftime("%A").downcase 
    if sunday == true 
    #if (day_of_week == 'sunday') or (day_of_week == 'monday') or (day_of_week == 'tuesday') or (day_of_week == 'wednesday') or (day_of_week == 'thursday') or (day_of_week == 'friday') or (day_of_week == 'saturday') 
    #if ((day_of_week == 'sunday') and (sunday == true)) or ((day_of_week == 'monday') and (monday == true)) or ((day_of_week == 'tuesday') and (tuesday == true)) or ((day_of_week == 'wednesday') and (wednesday == true)) or ((day_of_week == 'thursday') and (thursday == true)) or ((day_of_week == 'friday') and (friday == true)) or ((day_of_week == 'saturday') and (saturday == true)) 
     visits.create(:visit_price => visit_price, :visit_type => visit_type, :client_id => client_id, :visit_date => date) 
     day += 1 
    else 
     day += 1 
    end 
    end 
end 
Смежные вопросы