Я хочу переписать ручную логику для обновления таблицы, чтобы использовать вложенные атрибуты, используя третью таблицу для выбора нескольких значений идентификатора. Это моя первая попытка сделать это.
У меня есть модель MediaLibrary. У меня есть модель PageTitle, которая содержит имена. У меня есть модель MediaPage, которая содержит поля идентификатора для MediaLibrary и PageTitle. Я хочу заполнить MediaPage, используя вложенные атрибуты. Я хочу создать collection_select для PageTitle со значениями, которые заполняют page_title_id MediaPage.
Вот мои определения модели.
media_library.rb
has_many :media_pages, dependent: :destroy
accepts_nested_attributes_for :media_pages, allow_destroy: true
media_page.rb
belongs_to :media_library
validates :media_library_id, presence: true
validates :page_title_id, presence: true
page_title.rb
has_many :media_pages
Мой исходный код представления, когда я вручную собирал значения, приведен ниже.
<%= fields_for :media_pages do |media_page| %>
<%= media_page.label :media_page, "Page Titles" %><%= media_page.collection_select(:page_title_id, PageTitle.order("name"), :id, :name, {}, {multiple: true}) %>
<% end %>
Вот мой текущий вид:
<%= f.label :media_pages, "Page Titles" %>
<%= f.fields_for :media_pages do |media_page| %>
<%= media_page.collection_select(:page_title_id, PageTitle.order("name"), :id, :name, {}, {multiple: true}) %>
<% end %>
Если у меня есть более одной строки MediaPage, в представлении будет отображаться список collection_select для каждой строки. Например, если у меня есть две строки MediaPage, я увижу один список collection_select с выделенным именем PageTitle для первой записи и второй список collection_select с выделенным именем PageTitle для второй записи. Как видите, единственное, что я изменил по сравнению с первым оператором fields_for, а второе — это (1) перемещение метки за пределы fields_for и (2) добавление f.
Я попытался сделать что-то подобное в Rails 3 Rails 3.2.13 - Удалить запись Из вложенных атрибутов. Когда я пытался это сделать в Rails 3, collection_select отображал только один список с несколькими выделенными строками. Поскольку возникла проблема с пустой записью в массиве, я решил продолжить ручной процесс обновления промежуточной таблицы.
Я хочу, чтобы в моем представлении отображался один список collection_select, в котором можно было бы выбрать несколько идентификаторов PageTitle, и заполнить таблицу MediaPage с помощью вложенных атрибутов. Если строки существуют, я хочу, чтобы соответствующие строки PageTitle были выделены.
Я пытался решить это в течение длительного времени. В ходе моих исследований я не нашел примеров, когда вложенные атрибуты заполнялись с помощью отдельной таблицы.
Любая помощь будет оценена по достоинству.