Rails:在单个时间顺序列表

时间:2017-12-23 21:36:38

标签: sql ruby-on-rails postgresql

我有2个模型:taskrequest_task。它们是不同的表,因为它们是非常不同的项目。

我还有一个"我的任务"我的应用程序的一部分,我想显示一个结合了tasks排序的request_tasksdue_date的列表。

我看到了一些选项,但我不确定哪种方法最干净。我试图找到尽可能简单的解决方案并遵循大多数惯例。

(1)Ruby中的两个DB查询和连接/顺序

在我看来,这会起作用,但速度慢而且性能不高。我宁愿使用DB的强大功能来选择和排序数据而不是Ruby。这个列表可能有几百条记录。

# Pseudocode
tasks = current_user.tasks
request_tasks = current_user.request_tasks
sorted_records = (tasks + request_task).sort! { |a, b| a.due_date <=> b.due_date }

(2)SQL Query进行一次数据库查询

我更喜欢这样的东西,但问题是我不知道如何获取记录并实例化正确的模型(taskrequest_task)。我也不太擅长这个所需的SQL:

class AbstractTask
  def records
    # Some ActiveRecord/SQL that selects filtered Tasks and RequestTasks from DB and instantiates proper model
  end
end

# Combines Tasks and RequestTasks that match criteria and are ordered
records = AbstractTask.records.where(user_id: current_user.id).order(:due_date)

(3)使用单表继承缩减为单个表

这&#34;有效,但是我会有一堆未使用的属性,因为tasksrequest_tasks非常不同。

但这样做的好处是能够查询单个表并返回所有相关记录的列表。

这可能是目前最简单的方法。我认为它会给我我想要的一切,只有一半记录的未使用的属性。如果没有其他清洁解决方案,这种权衡可能是值得的。

0 个答案:

没有答案