Ruby 2.1.2 と Rails 4.1.4 を使用しています
tl;dr; 次のようなフォームから(paramsを介して)コントローラーに入るユーザーから日付と時刻を取得しています:
pickuptime = params[:appointment][:pickuptime]
(byebug) pickuptime
"01/06/2015 7:26 PM"
顧客が過去に予定を作成できないように、将来であることを確認する必要があります。また、顧客は別の場所にいる可能性があるため、データベースに顧客の time_zone を保存しています。
詳細:
フォームを介してコントローラーで時間を取得しています:
pickuptime = params[:appointment][:pickuptime]
(byebug) pickuptime
"01/06/2015 7:26 PM"
次に、これを に変換してDateTime
、予定レコードを作成できるようにします。
pickuptime = DateTime.strptime(pickuptime, "%m/%d/%Y %l:%M %p")
@appointment = @car.appointments.build(garage_id: garage_id, pickuptime: pickuptime)
私のAppointment
モデルには、過去に予定を作成できないことを保証する検証があります。
def pickuptime_is_in_future
if pickuptime < Time.current
errors.add(:pickuptime, "Appointment must be in the future")
end
end
@car.garage.time_zone
予定を作成するときに、データベースに保存されている顧客の time_zone ( ) を考慮したいと思います。
pry(main)> Garage.first.time_zone
Garage Load (0.6ms) SELECT "garages".* FROM "garages" ORDER BY "garages"."id" ASC LIMIT 1
=> "Eastern Time (US & Canada)"
現在、これは機能していません。将来 1 分間の予定を作成すると、次のようになります。
(byebug) pickuptime
Tue, 06 Jan 2015 19:22:00 UTC +00:00
(byebug) Time.current
Wed, 07 Jan 2015 00:21:53 UTC +00:00
これにより、予定が将来作成されたので成功するはずであるにもかかわらず、検証が失敗します。
これを正しく実装する方法についてのガイダンスは大歓迎です!