Какие рельсы образуют помощник, который я должен использовать, чтобы люди оценивали вещи? - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть 6 различных курсов, и я хочу, чтобы студенты оценивали их по степени сложности. Я смотрел на number_field (и просто собирался сделать так, чтобы студенты назначали число из диапазона), но когда я попробовал его, только в некоторых браузерах были стрелки вверх и вниз для перемещения по диапазону, в то время как другие этого не делали, и это было не является хорошим решением, поскольку оно просто представляет пустое поле, в которое студенты могут поместить текст, когда в базе данных требуется целое число

Затем я начал искать помощника по параметрам формы из API http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001593

но я не мог понять, как применить это к моей ситуации. У меня есть модель Студента, и в таблице 6 столбцов -: математика,: наука,: французский,: английский,: история,: география - в настоящее время установлено значение integer тип

Есть ли способ использовать помощник параметров формы (показанный ниже из API) и применить его к моим требованиям, чтобы они ранжировали классы от 1 до 6 (от самого сложного до самого легкого и т. Д.)?

Example with @post.person_id => 2:

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, {:include_blank => 'None'})
could become:

<select name="post[person_id]">
  <option value="">None</option>
  <option value="1">David</option>
  <option value="2" selected="selected">Sam</option>
  <option value="3">Tobias</option>
</select>

1 Ответ

1 голос
/ 02 декабря 2011

Если 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 ответа.К сожалению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...