Параметры статического списка Ruby on Rails для выпадающего списка - PullRequest
14 голосов
/ 22 февраля 2011

В моей базе данных есть таблица Person, и у меня есть столбец с именем person_type.Мне не нужна модель базы данных для person_type, так как она всегда будет либо "Волонтер", либо "Участник".Где я мог бы создать статический массив для хранения этих значений и как связать этот массив с хелпером Ruby on Rails?Было бы лучше всего создать помощника выбора?

Спасибо!

1 Ответ

39 голосов
/ 22 февраля 2011

Самый простой способ реализовать это, используя константу в вашей модели Person:

class Person < ActiveRecord:Base
  PERSON_TYPES = ["Volunteer", "Participant"]
end

, к которому вы можете получить доступ с помощью помощника выбора:

f.select(:person_type, Person::PERSON_TYPES)

Если вам нужно рассмотреть i18n, ему нужно всего лишь несколько небольших модификаций.

С учетом этих записей в ваших файлах i18n:

# config/locales/en.yml
person_types:
  volunteer: "Volunteer"
  participant: "Participant"

# config/locales/de.yml
person_types:
  volunteer: "Freiwillige"
  participant: "Teilnehmer"

Вы можете обновить свою модель и просмотреть таким образом:

# app/models/person.rb
class Person < ActiveRecord:Base
  # The values have been made lower-case to match the conventions of Rails I18n
  PERSON_TYPES = ["volunteer", "participant"]
end

# app/views/people/_form.html.erb
<%= f.select :person_type, Person::PERSON_TYPES.map { |s| [I18n.t("person_types.#{s}"), s] } %>

Это даст вам HTML, который вы ищете:

<!-- assuming the current I18n language is set to 'de' -->
<select name="person[person_type]">
  <option value="volunteer">Freiwillige</option>
  <option value="participant">Teilnehmer</option>
</select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...