0

レコードを作成するために要求された日付が利用可能かどうかを評価するカスタム検証を作成しようとしています。

これは私のテーブル スケジュール スキーマです

  create_table "schedules", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer  "doctor_id"
    t.boolean  "sun"
    t.boolean  "mon"
    t.boolean  "tue"
    t.boolean  "wed"
    t.boolean  "thu"
    t.boolean  "fri"
    t.boolean  "sat"
  end

たとえば、要求された日付が金曜日でschedule.fritrue の場合、レコードを作成できます。それ以外の場合はエラーが発生します。

テーブルのスケジュールのデータ フィールドを繰り返し処理して、どの日が true または false を返すかを評価し、要求された日と比較する方法はありますか?

4

1 に答える 1

0

このようなものを探しているのではないかと思います。モデルを検証しようとしていると仮定するとAppointment、検証は次のようになります。

class Appointment
  # this assumes that the appointment has at least two fields:
  # doctor_id : the same value as in the Schedule object
  # adate : a string in the form "mon", "tue", etc.
  validate :doctor_is_free
  def doctor_is_free 
    schedule = Schedule.where(doctor_id: self.doctor_id).first
    #return the day of a date. e.g. "sun"
    requested_day = adate.to_date.strftime("%a").downcase

    # this line will send a request to the Schedule instance using
    # the value of adate as the method name. So if adate == 'tue' and
    # schedule.tue = false then this will add an error to the validation.
    unless schedule.send(requested_day.to_sym)
      self.errors[:adate] << "The doctor is not available on #{ self.adate }"
    end
  end
end
于 2013-01-25T17:08:19.380 に答える