我正在尝试查询用户尚未完成的所有任务。
我创建了一个名为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}}
感谢任何帮助!
答案 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
关联将允许您查询状态,但是您需要将其链接到关于任务的查询,因此链接关联将无法获得您想要获取的位置。