允许用户设置工作人员完成任务的时间表

Allow user to set schedule for worker to complete assignnment

我有一个应用程序允许管理员创建分配并分配给帐户上的工作人员。这方面效果很好,但我正在尝试为管理员添加一种方法来设置完成这些任务的时间表。诸如多久一次(每周、每月等...)以及任务需要多长时间(几小时或几分钟)之类的事情。我开始了一点这个构建。基本上,我将赋值属性设置为包括 start_at end_atfrequency。不过,我不确定如何处理这些属性。以前有人建立过这样的系统吗?我可以使用哪些好的 gem 或库来帮助解决这个问题?这是我的作业模式:

架构:

  create_table "assignments", force: :cascade do |t|
    t.string   "name"
    t.string   "description"
    t.integer  "account_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "attachment"
    t.boolean  "finished",       default: false
    t.integer  "finished_count"
    t.boolean  "in_progress",    default: false
    t.datetime "start_at"
    t.datetime "end_at"
    t.string   "frequency"
  end

我觉得你的做法其实还是不错的。那就是我会做的。我可能会将 frequency 设为枚举类型,以仅包含某些值,例如:'hourly, daily, weekly, monthly, yearly,' 等。这很容易通过在 assignment.rb 中的模型 class 中添加以下行来实现:

enum frequency: [ :hourly, :daily, :weekly, :monthly, :yearly ]

您定义 start_atend_at 的方式很好。每当用户访问他们的任务时,您只需对任务执行查询以确定它是在进行中、已逾期还是尚未打开。

此外,您似乎正在存储两个布尔值,分别称为 'finished' 和 'in_progress'。我可能会通过创建另一个名为 'status' 的枚举类型来简化这些字段,定义如下:

enum status: [ :not_started, :in_progress, :finished ]

您需要从 table 中删除 'finished' 和 'in_progress' 列,并添加一个名为 'title' 的字段。创建迁移文件并粘贴以下代码以修改table:

def change
  remove_column :assignments, :finished
  remove_column :assignments, :in_progress
  add_column :assignments, :status, :integer, default: 0

  add_index :assignments, :status
end

这就是我会做的,但这只是我的意见 :) 您需要编写代码来通过比较开始时间和结束时间来确定作业是否正在进行中。