获取当前用户限制的关系,而不在Rails中生成N个查询

时间:2016-08-27 16:00:57

标签: ruby-on-rails

在网络应用程序中我构建了一个名为Task的模型,另一个名为TaskStatus。任务是全局的,并且有许多TaskStatus也属于用户(许多用户执行相同的任务和状态跟踪)。

我希望显示所有任务并访问属于当前用户的该任务的状态,而不生成N个查询(每个任务一个)。 Rails是否提供了实现这一目标的方法?我一直在玩范围,包括无效。

我知道我可以手动运行第二个查询,并将它们存储在由任务ID索引的哈希中,但是如果可能的话,我试图找到一种更难以实现的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用条件指定此过滤器使用单独的关联:

has_many :current_user_task_statuses,
conditions: { user_id: proc { current_user.id } },
class_name: "TaskStatus"

然后你可以用这样的常量查询预加载所有想要的TaskStatuses:

Task.all.includes(:current_user_task_statuses)

我并不完全确定proc会在条件下工作,但试一试。如果没有,请尝试:

has_many :current_user_task_statues,
proc { where('user_id = ?', current_user.id) },
class_name: 'TaskStatus'

希望这有帮助!