如何列出可供用户使用的所有任务?

时间:2018-05-31 16:10:38

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

我正在尝试查询用户尚未完成的所有任务。

我创建了一个名为state

的模型
@tasks = []
current_user.states.where(value_cd: 0).each do |task|
      @tasks << state.task
end

class User和class Task与类状态具有has_many关系。

我已经尝试过这样做了,我最终得到了一个数组,如下所示:

Tasks.where(state.value: :available && state.user_id == current_user.id)

如何通过查询执行此操作?

我希望能够达到类似的目的:

{{1}}

感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

我目前无法对其进行测试,但我相信你想使用includes。 这样的事情应该有效:

tasks = Task.includes(:states).where(states: { value: :available, user_id: current_user.id})

您还可以阅读有关指定条件here

的更多信息

但如果我没有弄错的话,你也可以通过这种方式获得用户尚未完成的所有任务:

current_user.tasks.map(&:states).map(&:available)

- engineersmnky说我错了。

答案 1 :(得分:0)

使用专用范围更新User模型:

has_many :available_tasks, -> { where('state.id' => 0) }, through: :state

并使用:

current_user.tasks

或使用:

Tasks.joins(:state).where(
  'state.value' => 0,
  'state.user_id' => current_user.id)

答案 2 :(得分:0)

class Task
  has_many :states
end

Task.joins(:states).where(states: {user_id: current_user.id, value: :available})
Task.joins(:states).where.not(states: {value: :completed})
    .where(states: {user_id: current_user.id})

这种方法首先要确定你想要的结果是一组任务。因此,您希望查询任务模型以获得该结果。

current_user.states关联将允许您查询状态,但是您需要将其链接到关于任务的查询,因此链接关联将无法获得您想要获取的位置。