Filter on multiple select

Hello,

I have a many-to-many relationship between the model "exams" and the
model "students", in the middle I have the model "registrations".

Students are registered to a "course" (another model) and any exam is
associated to a "course".

I create a view in exams that permit to add the students with multiple
selection:

<%= f.select :student_ids, Student.all.map { |student| [student.name,
student.id] }, { }, { multiple: true }

but this solution show me all students in the db. I wish I had only the
students registered in the same course of exam.

I don't know how filter the array and put it in the multiple selection.

Any suggestion?

Thanks to all.

Hello,

I have a many-to-many relationship between the model "exams" and the
model "students", in the middle I have the model "registrations".

Students are registered to a "course" (another model) and any exam is
associated to a "course".

I create a view in exams that permit to add the students with multiple
selection:

<%= f.select :student_ids, Student.all.map { |student| [student.name,
student.id] }, { }, { multiple: true }

but this solution show me all students in the db. I wish I had only the
students registered in the same course of exam.

I don't know how filter the array and put it in the multiple selection.

I think you need to add a relationship between a course and a user and use
that relationship to figure out that list of student choices eligible for
the exam.

What do you mean by "the same course of exam".

Colin

I think you need to add a relationship between a course and a user and
use that relationship to figure out that list of student choices eligible
for the exam.

In this project, any student can join only one course. In fact, the
relationship between students and course is:

belongs_to :course # in student.rb
has_many :students # in course.rb

The DB have 4 table:

Students (n)---------(1) Courses
  (1) (1)
   > >
   > >
  (n) (n)
Registrations (n)-----(1) Exams

I create 2 views to manage Exams table. One, to insert title, date and
course_id; another one to join stundents and an existed exam. In this
second view I wish to present to a user (in a multiple selection, or
something like that) only the students associated to a course_id of
exam.

To populate the Registrations table, I use a multiple selection, but I'm
not able to filter the students.

What do you mean by "the same course of exam".

I hope the graph help to understand... and I hope my english isn't so
bad :slight_smile:

Sorry for the double post.

I try to use squeel gem in this way:

<%= f.select :students_ids, Student.where(:course_id =>
@exam.course_id).map { |student| [student.name, student.id] }, { }, {
multiple: true } %>

I replaced .all with .where(condition). After two days of tests I find
this solution and seems works.

Is it correct? I started to use Rails three weeks ago and I'm not
sure...

Instead of Student.where(:course_id => @exam.course_id) use
@exam.course.students

Also I don't see where the squeel gem is relevant to the code you showed.

Colin

Instead of Student.where(:course_id => @exam.course_id) use
@exam.course.students

Good. Thanks Colin :slight_smile: