2015-10-05 3 views
1

Я пытаюсь настроить способ создать ежедневный график, который сравнивает эти столбцы:дата следующего платежа сохранить как DateTime рельсы

Я хранящий PayPal IPN next_payment_date, который поставляется в другом формате, чем формат по умолчанию рельсов

пример

PayPal IPN "next_payment_date"=>"03:00:00 Oct 06, 2015 PDT"

рельсы created_at: "2015-10-05 14:24:17"

Это разные форматы, и я не очень уверен, что рельсы могут их сравнить.

, например

Я пытался хранить next_payment_date как datetime как этот

subscription = Subscription.find_by(paypal_recurring_profile_token: params[:recurring_payment_id]) 
if params[:next_payment_date] 
    subscription.update_attributes(paid_until: params[:next_payment_date]) 
end 

это дата PayPal:

"next_payment_date"=>"03:00:00 Oct 06, 2015 PDT"

и это то, что рельсы магазинов

paid_until: "2015-10-05 03:00:06"

кажется, что рельсы знают немного, но не меняют месяц и день, просто время.

Каков правильный способ хранения этих параметров?

редактировать

схема:

create_table "payment_notifications", force: :cascade do |t| 
    t.text  "params" 
    t.integer "user_role_id" 
    t.string "status" 
    t.string "transaction_id" 
    t.datetime "created_at",     null: false 
    t.datetime "updated_at",     null: false 
    t.integer "user_id" 
    t.string "txn_type" 
    t.string "recurring_payment_profile_id" 
end 

create_table "subscriptions", force: :cascade do |t| 
    t.integer "user_role_id" 
    t.integer "user_id" 
    t.string "paypal_customer_token" 
    t.string "paypal_recurring_profile_token" 
    t.datetime "created_at",          null: false 
    t.datetime "updated_at",          null: false 
    t.datetime "paid_until" 
    t.boolean "canceled",      default: false 
end 

редактировать 2

Попытка преобразовать строку времени, но это, кажется, выходит из строя:

irb(main):006:0> PaymentNotification.last.params[:next_payment_date] 
    PaymentNotification Load (1.9ms) SELECT "payment_notifications".* FROM "payment_notifications" ORDER BY "payment_notifications"."id" DESC LIMIT 1 
=> "03:00:00 Oct 07, 2015 PDT" 
irb(main):007:0> PaymentNotification.last.params[:next_payment_date].to_time 
    PaymentNotification Load (4.7ms) SELECT "payment_notifications".* FROM "payment_notifications" ORDER BY "payment_notifications"."id" DESC LIMIT 1 
=> 2015-10-06 03:00:07 +0000 

ответ

2

Существует несколько различных классов рубинов/рельсов, которые имеют дело с датами и временем. Проверьте класс на разных объектах, с которыми вы работаете. Пример (в консоли рельсов):

2.2.2 :011 > Date.current.class 
=> Date 
2.2.2 :012 > Time.now.class 
=> Time 
2.2.2 :013 > DateTime.now.class 
=> DateTime 
2.2.2 :014 > Time.zone.now.class 
=> ActiveSupport::TimeWithZone 

Достойная ссылка на дело с этими классами: http://stevenyue.com/2013/03/23/date-time-datetime-in-ruby-and-rails/

1

Creat ed_at - ActiveSupport::TimeWithZone класс.

Я предполагаю, что next_payment_date либо Date, либо DateTime класс-, но снова - запустите .класс, чтобы понять это.

Что вас сбивает с толку, так это то, что вы не знаете, почему рельсы отображают их по-разному - это потому, что нет одинаковых объектов - каждый из них - это другой класс.

Итак: 1) проверить, какой класс они

2) Определите, какой класс, чтобы преобразовать это сделать.

3) Сравните их.

Пример: (при условии, paid_until в UTC)

> next_payment_date_timezone_pdt = ActiveSupport::TimeZone["Pacific Time (US & Canada)"].parse("03:00:00 Oct 06, 2015 PDT") 
=> Tue, 06 Oct 2015 03:00:06 PDT -07:00 
> next_payment_date_timezone_utc = next_payment_date_timezone.in_time_zone('UTC') 
=> Tue, 06 Oct 2015 10:00:06 UTC +00:00 

> paid_until_timezone_utc = ActiveSupport::TimeZone['UTC'].parse('2015-10-05 03:00:06') 
=> Mon, 05 Oct 2015 03:00:06 UTC +00:00 

Теперь вы можете сравнить их обоих. Это основная идея - вы должны приспособить ее к вашим потребностям.

+0

, когда я 'PaymentNotification.find (5) .params [: next_payment_date] .class' он возвращает в качестве строка, что мне делать в этом случае? –

+0

Можете ли вы добавить текст в вопрос? – Roko

+0

Я добавил схему на вопрос –

Смежные вопросы