0

我有以下材料:

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

我想获得以下所有材料:

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

我将如何进行这种查询?

4

2 回答 2

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.materialsMaterial.where(user_id: the_id_of_the_user)

于 2013-08-21T12:44:47.383 回答
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))
于 2013-08-21T11:35:10.840 回答