0

モデルを使用してネストされた属性を作成する after_create ステートメントがあります。曜日のブール フィールドをフィルタリングしていますが、if ステートメントによってサーバーがフリーズしています (エラーは発生しません)。

以下に関連するコードを含めました。明確にするために、日曜日から土曜日まではデータベースのブール値フィールドです。ブール フィールドをフィルタリングする「and」句をすべて削除すると、フォームは完成しますが、選択されていない平日の日付を除外する必要があります。

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

アップデート

ログを調べたところ、時々、サーバーが次のようなエラーをスローします。これは sqlite のロック エラーだと思います。これについてこれ以上の洞察はありますか?

BusyException: cannot rollback transaction - SQL statements in progress: rollback transaction
4

1 に答える 1

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 
于 2013-03-05T03:17:23.803 に答える