【问题标题】:Rails: Upon object save, calculate time difference and save as integerRails:在对象保存时,计算时间差并保存为整数
【发布时间】:2017-01-28 12:01:04
【问题描述】:

当用户去保存一个活动(下面的模式)时,我想用活动创建(created_at)和更新(updated_at)之间的分钟数更新模型上的列。

架构:

create_table "activities", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
    t.integer  "student_id"
    t.string   "status"
    t.integer  "user_id"
    t.integer  "minutes_out"
    t.index ["student_id"], name: "index_activities_on_student_id"
    t.index ["user_id"], name: "index_activities_on_user_id"
  end

activities_controller.rb

class ActivitiesController < ApplicationController
  before_save :set_minutes_out

  ...

  private
      def set_minutes_out
         activity.minutes_out = (activity.created_at - activity.updated_at).to_i.abs
         activity.save!
      end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    这发生在带有 after_update 的模型中:

    activity.rb

    after_update :save_minutes_out
      ...
    def save_minutes_out
      created_at = self.created_at
      updated_at = self.updated_at
      seconds_out = (created_at - updated_at).to_i.abs
      minutes_out = (seconds_out / 60)
      if (minutes_out = 0)
        minutes_out = 1
      end
      update_column :minutes_out, minutes_out
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多