collection_select с «один ко многим / многие ко многим» - PullRequest
0 голосов
/ 12 сентября 2018

Как использовать 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 поможет решить эту проблему.

1 Ответ

0 голосов
/ 12 сентября 2018

Попробуйте использовать options_for_select

<%= f.select :language_id, options_for_select(@language_project.languages.all.map{|l| [l.language, l.id]}, @language.id), include_blank: false, class: 'form-control' %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...