То, что вы описываете, является отношением многих ко многим. То, что вы сделали, это просто отношения один ко многим.
В отношениях «многие ко многим» вы определяете множество независимых записей на каждой стороне и используете таблицу соединений для создания ссылок между ними.
В отношении один ко многим каждая запись на одной стороне независима, в то время как каждая запись на стороне многих зависит от той, с которой она связана.
Примеры, вытекающие из ваших вопросов:
много ко многим: Каждый ученик может иметь много наград, но для того, чтобы он имел значение, его не нужно привязывать к награде. Каждая награда может быть заработана многими студентами, но для того, чтобы они имели смысл, не нужно связывать их со студентом Значки StackOverflow - прекрасный тому пример.
один ко многим: Каждый ученик может иметь много наград, но для того, чтобы он имел значение, его не нужно привязывать к награде. Каждая награда уникальна только для одного студента.
Как превратить ваши отношения в отношения многие ко многим:
- создать таблицу наград, в которой есть столбцы
student_id
и award_id
.
- удалить столбец student_id из таблицы наград.
Информировать ActiveRecord о связях.
class Student < ActiveRecord::Base
has_many :awardings
has_many :awards, :through => :awardings
...
end
class Awarding < ActiveRecord::Base
belongs_to :student
belongs_to :award
end
class Award < ActiveRecord::Base
has_many :awardings
has_many :students, :through => :awardings
end
Обновите ваши формы, чтобы отразить изменения.
Используйте либо поле множественного выбора, либо серию флажков, чтобы управлять несколькими одновременно. Есть много уроков об этом. Этот эпизод Railscast устарел, но это хорошее начало.
P.S. Скорее всего, вы получите ответы, если не отметите флажок вики сообщества. Вики сообщества предназначены для нетехнических вопросов, ответы на которые, вероятно, будут улучшены несколькими пользователями.