Ruby on rails 3 如何编写以下ActiveRecord查询?

Ruby on rails 3 如何编写以下ActiveRecord查询?,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我有以下材料: 属于用户:用户id: 可以是母版或版本:状态: 如果版本为:父id:,则可以有父id(注意:如果是主版本,则父id为零) 我想得到所有的材料: a) 属于某个用户 b) 除非版本的父id不是母版id之一,否则不是版本 我该如何进行这种查询?试试这些 a)Material.joins(:users).merge(User.where(field: value)) b)Material.where("parent_id IS NOT NULL and parent_id not

我有以下材料:

  • 属于用户:用户id:
  • 可以是母版或版本:状态:
  • 如果版本为:父id:,则可以有父id(注意:如果是主版本,则父id为零)
我想得到所有的材料:

a) 属于某个用户 b) 除非版本的父id不是母版id之一,否则不是版本

我该如何进行这种查询?

试试这些

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))

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

master_ids = certain_user.materials.where(status: 'master').pluck(:id)
certain_user.materials.where("status = ? OR parent_id NOT IN (?)", 'master', master_ids)
如果您没有访问该用户实例的权限,只需用
Material.where(user\u id:the\u user的\u id)