I didn't know about association filters, let me try to use them and report back.
On Sunday, May 31, 2020 at 11:29:25 PM UTC+3, Jeremy Evans wrote: > > On Sunday, May 31, 2020 at 12:39:41 PM UTC-7, Aryk Grosz wrote: >> >> In the simplest use case, lets say you have a table classroom_students. >> You have a dataset of classrooms and you want to count the students in >> those classrooms. >> >> So you join on the classroom_students table, and then do a group by >> classroom_id. However, you have another dataset of classrooms that that you >> want to exclude from the calculation, but you need the students from those >> classrooms >> >> The most direct way of thinking about this is to grab all the student IDs >> in those classrooms and exclude them so: >> >> >> exclude_students = >> exclude_classrooms_dataset.association_join(:classroom_students).select(:student_id).distinct >> >> or more cleaner: >> >> >> exclude_students = exclude_classrooms_dataset.student_pks_dataset >> (which automatically distinct and get it off the join table) >> >> Now you can return the exclude_students count with exclude_students.count >> (since it's already distinct). You could also do: >> >> classroom_dataset.association_join(:classroom_students).exclude(student_id: >> exclude_students).group(Sequel[:classrooms][:id]) >> > > I'm assuming you have: > > Classroom.many_to_many :students > Student.many_to_many :classrooms > classroom_datasets = Classroom.dataset > exclude_classroom_dataset = Classroom.where(:id=>1..100) > student_dataset = Student.dataset > > Then you can use association filters: > > > classroom_dataset.exclude(:students=>students_dataset.where(:classrooms=>exclude_classroom_dataset)) > > Are there cases where you think association_pks dataset methods would be > needed that aren't covered by association filters? > > Thanks, > Jeremy > -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sequel-talk/81a17eeb-7ada-4e34-9aad-a575fd5a228c%40googlegroups.com.
