【发布时间】:2018-11-10 17:15:00
【问题描述】:
我正在尝试查询用户尚未完成的所有任务。
我创建了一个名为 state 的模型
class State < ActiveRecord::Base
as_enum :value, %i{available inprogress completed}
belongs_to :user
belongs_to :task
end
class User 和 class Task 与 class state 有 has_many 关系。
我尝试过这样做,最终得到了一个数组,如下所示:
@tasks = []
current_user.states.where(value_cd: 0).each do |task|
@tasks << state.task
end
我怎样才能通过查询来做到这一点?
我希望能达到类似的效果:
Tasks.where(state.value: :available && state.user_id == current_user.id)
感谢任何帮助!
【问题讨论】:
-
我不知道 Ruby on rails.. 但我知道 SQL 你需要使用 LEFT JOIN
-
用户和任务有关系吗?
-
顺便问一下,
as_enum是什么?这是 Rails 的现代枚举功能的反向移植吗?如果您使用的是 Rails 4.1+(?),那么这现在是本机功能;您可以丢弃第三方宝石。 -
另外,如果你通过它们的编号来引用枚举,那么你有点错过了重点!......整个想法是“计算机”使用数字,而“人类”使用有意义的名称。因此,在这种情况下(取决于您使用的实际库),应该可以执行以下操作:
states.available而不是states.where(value_cd: 0)
标签: sql ruby-on-rails ruby postgresql ruby-on-rails-4