Если select
соответствует вашим потребностям,
= form_for @student do |f|
= f.select :math, (1..10)
, если вы хотите, чтобы математика была оценена по 10-балльной шкале.Я использовал haml, но это не имеет большого значения.
Редактировать (добавлена проверка для запроса OP:)
class Student < ActiveRecord::Base
validates_with StudentValidator
end
class StudentValidator < ActiveModel::Validator
def validate(record)
courses = [:math, :science, :french, :english, :history, :geography]
courses.combination(2).each do |f,s|
f_value = record.send(f)
s_value = record.send(s)
if f_value == s_value
record.errors[:base] << "Two ranks can't be equal"
record.errors[f] << "can't be #{f_value}, #{s} is #{s_value}"
record.errors[s] << "can't be #{s_value}, #{f} is #{f_value}"
end
end
end
end
Я думал о добавлении проверки клиента, ноОтключение опций выбора не работает хорошо во всех браузерах AFAIK, поэтому вам придется динамически удалять и добавлять опции.Похоже, слишком много для меня, по крайней мере, для SO ответа.К сожалению.