From a UX perspective, I wouldn't use 21 checkboxes. Having that many will only lead to confusion for the end user. As I understand you need two and only two checked? Why not have two drop down select boxes? Each box contains all 21 choices. You will still run into the case where people will select two of the same, so its not fool proof. You could run some javascript to make sure that they don't select the same one for both or in rails validate uniqueness within the scope of the registration form.
Now lets talk ruby. If you want to be flexible (maybe your boss next week says "we want to have them select 4 majors"), I think you actually need 3 tables:
class Registration
has_many :registration_majors
has_many :majors, :through => :registration_majors
class Major
has_many :registration_majors
has_many :registrations, :through => :registration_majors
class RegistrationMajor
belongs_to :major
belongs_to :registration