查找具有两个条件的所有记录,其中一个条件为真,其他条件为假

时间:2016-01-30 21:02:26

标签: ruby-on-rails ruby ruby-on-rails-4 associations

我正在尝试查找满足两个条件的所有相关记录。 我正在尝试这个,但它不起作用,例如:

  @students = @group.students
    .includes(:attendances)
    .where.not(attendances: {student_id: @ids, event_time_id: @event_id})

  @students = @group.students
    .includes(:attendances)
    .where.not(attendances: {event_time_id: @event_id})
    .where.not(attendances: {student_id: @ids})

  @students = @group.students
    .includes(:attendances)
    .where("attendances.student_id IN (?) AND NOT attendances.event_time_id = ?", @ids, @event_id)

我想获取群组中存在的所有学生记录,但没有出席@event_id或根本没有出席。

2 个答案:

答案 0 :(得分:0)

我认为这可能会做你想要的(未经测试),而不是最优雅的代码......

[a]

答案 1 :(得分:0)

工作解决方案:

  @students = @group.students.includes(:attendances)
    .where("attendances.event_time_id != ?", @event_id)
    .references(:attendances)

  @students_on = @group.students.includes(:attendances)
    .where(attendances: { event_time_id: @event_id })

  @students = @students - @students_on

不确定这是否是最佳解决方案,但它解决了上述问题

<强>更新 代码版本更少:

  @students = @group.students
  @students_exist =  @group.students.includes(:attendances)
    .where(attendances: { event_time_id: @event_id })
  @students = @students - @students_exist