如何编写以下ActiveRecord查询?

时间:2013-08-21 10:56:59

标签: ruby-on-rails-3 activerecord

我有以下材料:

  • 属于用户: user_id:
  • 可以是主人或版本:状态:
  • 如果版本为
  • ,则可以有一个parent_id: parent_id:(注意:如果是master,则parent_id将为nil)

我想获得所有材料:

a)属于某个用户 b)不是版本,除非版本的parent_id不是主人的ID之一

我该如何进行此类查询?

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解正确。 这将为您提供给定用户的主材料或(不是用户主人的子项的版本材料)。

master_ids = certain_user.materials.where(status: 'master').pluck(:id)
certain_user.materials.where("status = ? OR parent_id NOT IN (?)", 'master', master_ids)

如果您无权访问该用户的实例,只需将certain_user.materials替换为Material.where(user_id: the_id_of_the_user)

答案 1 :(得分:0)

试试这些......

a)Material.joins(:users).merge(User.where(field: value))

b)Material.where("parent_id IS NOT NULL and parent_id not in (?)", Material.pluck(:id))