Как использовать collection_select
в сценарии One-ToMany-ToOne. Вот что у меня есть
Приложение управляет проектами. Каждый проект имеет свой набор языков, которые он поддерживает. Люди теперь могут публиковать сообщения в проектах
на одном из языков, поддерживаемых проектом.
Упрощенная структура классов:
class Project < ApplicationRecord
has_many :languageprojects
has_many :languages, through: :languageprojects
end
class Language < ApplicationRecord
has_many :languageprojects
has_many :projects, through: :languageprojects
def to_s
language
end
end
class Languageproject < ApplicationRecord
belongs_to :language
belongs_to :project
end
class Projectmessage < ApplicationRecord
belongs_to :language
belongs_to :project
end
Как мне отформатировать collection_select в форме, где пользователи вводят новое сообщение (Projectmessage). Пользователь должен иметь возможность выбрать один из языков, поддерживаемых проектом.
Я хочу отображать названия языков на родном языке пользователя, поэтому языки хранятся в таблице ЯЗЫКИ в формате
en
fr
ru
Затем я сохраняю переводы этих языков в папке locales в en.yml, fr.yml, ru.yml. E.g.:
en:
language_en: English
language_fr: French
language_ru: Russian
Я так далеко:
<%= form.collection_select :language_id, Languageproject.all, :id, :language, { include_blank: false }, { class: 'form-control' } %>
Показывает значения записей таблицы (т.е. en, fr, ru). Как мне включить языковой перевод? Я хочу, чтобы в раскрывающемся меню отображались английский, французский, русский
Очевидно, что я всегда могу закодировать его вместо использования collection_select, но я надеюсь, что Ruby поможет решить эту проблему.