Я создаю веб-сайт для подкаста.Мои таблицы - это «Эпизоды» и «Гости», а также объединенный стол «Эпизоды_Гесты».«Эпизоды» имеют и принадлежат многим «гостям».У меня есть форма, которая обновляет информацию о каждом эпизоде, и я пытаюсь разрешить ей обновлять гостей, связанных с этим эпизодом (данные хранятся в объединенной таблице), но не могу понять это.
Iмне удалось добавить поле формы (form_for), которое заполняет связанную информацию о гостях, но когда я нажимаю обновить, эти поля не обновляют таблицу соединений (я даже не уверен, выводю ли я информацию).
Это таблица из представления «Редактирование» контроллера эпизода
<%= form_for(@episode) do |f| %>
<table summary="Episode form fields">
<tr>
<th> Episode ID </th>
<td><%= f.text_field(:id) %></td>
</tr>
<%= f.fields_for :guests, @episode.guests.each do |g| %>
<tr>
<!-- I am trying to add a selector for guests -->
<th>Guest: </th>
<td>
<%= g.text_area :last_name %>
</td>
</tr>
<% end %>
</table>
<div class="form-buttons">
<%= f.submit("Update Episode") %>
<% end %>
</div>
Модель эпизода
class Episode < ApplicationRecord
has_and_belongs_to_many :guests
accepts_nested_attributes_for :guests
scope:sorted, lambda {order("episode_number ASC")}
end
ГостьМодель
class Guest < ApplicationRecord
has_and_belongs_to_many :episodes
scope:sorted, lambda {order("id ASC")}
end
Контроллер эпизодов
class EpisodesController < ApplicationController
def edit
@episode = Episode.find(params[:id])
@guests = @episode.guests.all
end
def update
#Find a object using form parameters
@episode = Episode.find(params[:id])
@episode_guests = @episode.guests
#Update the object
if @episode.update_attributes(episode_params)
#If the save succeeds, redirect to the show actions
redirect_to(episode_path(@episode))
else
#If the save fails, redisplay the form so user can fix problems
render('edit')
end
end
private
def episode_params
params.require(:episode).permit(:id, :episode_number, :title, :guests, :file_name, :description, :date_released)
end
def guest_params
params.require(:guest).permit(:id, :guest_id, :first_name, :last_name)
end
end
Гостевой контроллер
class GuestsController < ApplicationController
def edit
@guest = Guest.find(params[:id])
end
def update
#Find a object using form parameters
@guest = Guest.find(params[:id])
#Update the object
if @guest.update_attributes(guest_params)
#If the save succeeds, redirect to the show actions
redirect_to(guest_path(@guest))
else
#If the save fails, redisplay the form so user can fix problems
render('edit')
end
end
private
def guest_params
params.require(:guest).permit(:id, :guest_id, :first_name, :last_name)
end
end
Я надеюсь, чточтобы я мог ввести идентификаторы гостя в форму, нажмите кнопку обновления и обновите гостей, связанных с этим эпизодом.